dubbo入门及和gRPC框架对比

  dubbo作为流行的rpc框架,有很多可取之处,有必要学习一下。dubbo的架构非常简单,4部分,Consumer,Register,Monitor, Client。

  dobbo的注册中心支持很多种,本文选用zookeeper。dubbo和springcloud都是通常意义上的rpc框架,只是springcloud采用http协议,dobbo基于tcp。

  dubbo怎么使用?官网这句话说得很明白了:

Using the Spring configuration to reference a remote service。

  在使用dubbo框架后,我们在provider端获取一个consumer的服务对象,然后就可以像调用本地方法一样,调用远程方法。了解其中的原理和报错,我们来实践一下。

  下面通过一个provider和一个consumer,来体会这个过程,报错:

java.lang.IllegalStateException: Failed to check the status of the service com.example.demo.service.GreetingService. No provider available for the service com.example.demo.service.GreetingService 
from the url zookeeper://127.0.0.1:2181/com.alibaba.dubbo.registry.RegistryService?application=annotation-consumer&default.timeout=3000&dubbo=2.6.2&interface=com.example.demo.service.
GreetingService&methods=sayHello&pid=1175&register.ip=172.20.10.3&side=consumer&timestamp=1592128316906 to the consumer 172.20.10.3 use dubbo version 2.6.2

  这个报错的原因就是服务未注册,至于原因,就是consumer和provider用interface不是一样的,被认为两个对象。具体报错,我们可以查看Zookeeper中存储的数据。

  看以看到,provider是临时节点,会写入Zookeeper中。按照官网配置,就可以跑起来了。然后我们看下dubbo的注册原理,主要的逻辑就在

com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry中。这张图可以快速看到接口的注册和订阅情况。

 

  dubbo框架入门比较简单,但是要熟练使用,还有很多细节,比如负载均衡等

  dubbo框架虽简单好用,但是局限于java语言,现在我们来看下gRP框架,采用golang语言实现,使用IDL方式,实现了跨语言。

  gRPC的架构非常简单,是C-S模型,只不过都在后端。

 

  consumer和provider是直连的,没有了注册中心,少了灵活性,但是其跨语言能力大大增强。架构上的差异,使它们偏向于不同的场景,比如在内网的微服务架构中,使用dubbo

更方便,服务可以在不改动原有服务的情况下,加入进来。在发布公网api接口时,则使用gRPC更方便,不需要额外的注册中心,更高的性能,标准通信协议,跨语言能力等。

    

参考博客:springcloud和普通rpc的区别

              dubbo基于配置方式的入门

posted @ 2019-05-03 22:40  懂得了才能做一些改变  阅读(1142)  评论(0编辑  收藏  举报