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®ister.ip=172.20.10.3&side=consumer×tamp=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的区别