Apache Dubbo的发展历程

Dubbo的运行机制

在这里插入图片描述

Dubbo 2.7 新特性

1.Repackage[^1]
2. 元数据
3.JDK8[^jdk]
4.动态配置
5.异步支持[^3]
6.路由支持

对于以上6点的解释:

  • 包名的变化:org.apache.dubbo
  • JDK8 Function的支持通过default method实现,还支持CompletableFuture异步编程的实现,还有Optional类、Lamdba表达式、Function的支持。
    在这里插入图片描述

2.6.x存在以下缺点:
       Future无法自动返回,不支持Provider端异步

以下例子只是逻辑,无法运行

 // Dubbo2.6.x 及以下版本异步支持
        public interface FooService{String findFoo(String name);}
        // 此调用会立即返回null
        fooService.findFoo(fooId);
        // 当结果返回后,会被通知和设置到此Future
        Future<Foo> fooFuture = RpcContext.getContext().getFuture();
        fooFuture.get();

2.7的支持:
       通过Jdk8的新特性—CompletableFuture方式来支持异步。

 // Dubbo 2.7 对异步支持
        // 方式一:接口中直接定义CompletableFuture
        public interface AsyncService{
            CompletableFuture<String> sayHello(String name);
        }

        // 方式二:新接口@AsyncFor
        public interface GreetingsService{
            String sayHi(String name);
        }

        @AsyncFor(GreetingsService.class)
        public interface GrettingServiceAsync extends GreetingsService{
            CompletableFuture<String> sayHiAsync(String name);
        }

具体如下:
在这里插入图片描述
在这里插入图片描述

*元数据的改造:
存在的问题:
在这里插入图片描述
问题
       provider端会将URL信息写入ZK里面的某一个节点,consumer端也会将URL信息写入ZK里面的某一个节点。同时consumer端会订阅zk节点,如果节点一有变化,会推送到consumer端。这些过程的发生网络开销是非常大的。
如果ZK是个集群,Provider端是个集群,Consumer端是个集群,这样分发、拉取的数据量会非常大。
分析:

改造:
在这里插入图片描述

注意一下:
       这个redis就是用来存储信息的,不会像consumer发送通知。当然可以使用其他数据库实现。只要实现对应的API。

  • 动态配置中心
    类似于Spring Cloud 有个Spring Cloud Client做个远程的动态配置中心。
    在这里插入图片描述

1.第一种场景

在这里插入图片描述

2.第二种场景

在这里插入图片描述
在这里插入图片描述

  • 路由规则
    在这里插入图片描述
    Dubbo原理图:
    在这里插入图片描述

参考:Apache Dubbo 杭州站

猜你喜欢

转载自blog.csdn.net/m0_37941483/article/details/89303358