700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Dubbo如何实现基于http的jsonrpc调用

Dubbo如何实现基于http的jsonrpc调用

时间:2019-10-02 15:02:54

相关推荐

Dubbo如何实现基于http的jsonrpc调用

Dubbo协议扩展

dubbo默认的协议是Duubo协议,同时也提供了多种协议的实现,目前实现的扩展有:

org.apache.dubbo.rpc.protocol.injvm.InjvmProtocolorg.apache.dubbo.rpc.protocol.dubbo.DubboProtocolorg.apache.dubbo.rpc.protocol.rmi.RmiProtocolorg.apache.dubbo.rpc.protocol.http.HttpProtocolorg.apache.dubbo.rpc.protocol.http.hessian.HessianProtocol

具体说明可以参考:

/zh-cn/docs/dev/impls/protocol.html

本文演示的就是使用http协议方式。

Dubbo-Http协议的使用姿势

从github上下载demo下来在,这里以注解方式的demo为例。地址参考文末链接。

消费端姿势

注册中心:Consul

其实消费端的配置很简单,配置下consul的地址即可,这样以来就默认使用consul方式的注册中心了。

dubbo.application.name=dubbo-demo-annotation-consumerdubbo.registry.address=consul://localhost:8500

服务引用(http)

那么,问题来了,就是消费端怎么设置http协议调用呢?也很esay。

答案就是在服务引用DemoService上加上注解@DubboReference(protocol=“http”)

package org.apache.dubbo.p;import org.apache.dubbo.config.annotation.DubboReference;import org.apache.dubbo.demo.DemoService;import org.ponent;import java.pletableFuture;@Component("demoServiceComponent")public class DemoServiceComponent implements DemoService {@DubboReference(protocol="http")private DemoService demoService;@Overridepublic String sayHello(String name) {return demoService.sayHello(name);}@Overridepublic CompletableFuture<String> sayHelloAsync(String name) {return null;}}

服务端姿势

服务端的使用姿势更加简单。如下所示,这样以来服务启动之后就会把DemoService注册到Consul上。

dubbo.application.name=dubbo-demo-annotation-providerdubbo.protocol.name=httpdubbo.protocol.port=20880

可以看到consul上已经注册了服务:

抓包测试

启动服务提供者和消费者之后,就可以进行抓包了。可以看到底层走的的确是jsonrpc的协议。

调用流程分析

Dubbo的调用我觉得用官网文档的这个图比较清晰。

Directory会把监听注册中心的事件,从而更新本地的服务列表,这些列表内的提供者信息最终会被封装为相应的invoker对象,确切的说是RegisterDirectory,即Directory的实现类来管理这些List< Invoker>.

当消费者发起调用,会走到AbstractClusterInvoker抽象类的Invoke方法,接着会做几件事,第一件事就是从Directory中拿到List< Invoker>.而AbstractDirecoty的实现类有两个,和注册中心有关的就是RegistryDirectory。

注意这里其实还有路由规则的过滤,也就是对注册中心的提供者列表做过滤,比如标签路由、条件路由等。然后还有一个必须要说的就是这个notify事件通知方法,对服务提供者的状态进行监听,从而及时更新本地的服务提供者列表。

拿到List之后,那就要进行初始化一个负载均衡,看下这个initLoadBlance方法。

服务列表有了,负载均衡器也有了,接下来就是集群调用了,集群的调用方式如图所示,默认的就是FailOver这种失败自动切换方式了。

暂时就分析到这里了。下篇文章:添源码走读:Dubbo带权重的随机负载均衡算法与warmup

参考资料

Dubbo官方文档:

/zh-cn/docs/source_code_guide/directory.html

Dubbo-Demo地址:

/apache/dubbo/tree/master/dubbo-demo

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。