之前一篇文章《Dubbo服务提供者发布及注册过程源码分析》已经介绍了Dubbo服务端的服务注册及发布过程,这篇文章将会介绍Dubbo服务端是如何接受请求以及响应请求的。
本文还是以Consumer-Provider的Demo为例,分析接收请求及响应请求的具体流程,在Dubbo服务端发布服务之后,它将会监听一个端口等待接收客户端的请求,当接收到请求后,会经过入站处理器进行处理,我们知道在发布服务的时候设置了NettyServerHandler
入站处理器,接收到请求之后,会经过NettyServerHandler#channelRead()
方法来获取请求的消息,我们来看一下它的实现:
1 | @Override |
在之前一篇文章《Dubbo消费者调用过程源码分析》讲到,在创建代理的时候会生成调用对象invoker,这个时候就会绑定集群策略,我们来看生成invoker的代码,在类ReferenceConfig#createProxy(Map<String, String> map)
方法中:
1 | //直接在配置文件中配置url,实现直接通信(如果既配置了直连地址又配置了注册中心的地址,则自动忽略注册中心的地址) |
我们总结出三种生成集群策略的入口,当urls的长度为1时,此时该url可能为注册中心的地址也可能是服务的直连地址,则进一步执行invoker = refprotocol.refer(interfaceClass, urls.get(0));
;当urls的长度不为1时,此时可能为多个注册中心的地址或者多个服务直连地址,当为多个注册中心的地址时,会执行:
1 | URL u = registryURL.addParameter(Constants.CLUSTER_KEY, AvailableCluster.NAME); |
当为多个直连地址时,则执行:invoker = cluster.join(new StaticDirectory(invokers));
,下面将对这三种方式进行详细的分析。
Dubbo提供了四种负载均衡策略:Random LoadBalance(加权随机负载均衡)、RoundRobin LoadBalance(加权轮询负载均衡)、LeastActive LoadBalance(最少活跃数负载均衡)、ConsistentHash LoadBalance(一致性hash负载均衡),下面将分别分析这四种负载均衡策略的源码。
先来看一下RandomLoadBalance类的源码:
1 | public class RandomLoadBalance extends AbstractLoadBalance { |
随机加权轮询算法还是比较容易理解的,下面继续分析RoundRobin LoadBalance。
Update your browser to view this website correctly. Update my browser now
基于Zookeeper实现分布式锁1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
基本环境master(centOS7-4:192.168.1.75)slave1(CentOS7-1:192.168.1.21)slave2(CentOS7-2:192.168.1.129)前提条件要保证这三台机器之间可以互相ping通基本配置在slave1机器上输入命令:vi /etc/ssh/s
前言:首先我们要知道Java中有哪些基本数据类型以及它们各自的封装类:package java.lang;基本数据类型封装类byteBytebooleanBooleancharCharactershortShortintIntegerlongLongfloatFloatdoubleDouble一、什
如何理解如下代码会造成DeadLock1234567891011121314151617181920212223242526272829303132333435363738394041import java.util.concurrent.ArrayBlockingQueue;import java
源码下载地址:https://github.com/shuaijunlan/Autumn-Framework在线Demo:http://autumn.shuaijunlan.cn项目介绍Autumn-Framework旨在提供通用的web系统解决方案,目前由作者本人一个人维护,更新速度缓慢,但是会持
帅俊岚ItemLinkPersonal home pageTwitterStack Overflow