dubbo与Netty的关系
Netty是个高性能的Java网络传输框架,在很多中间件或者分布式框架中几乎都能看到它的身影。既然Netty这么受欢迎,那到底怎么把netty嵌入到我们的系统中了?笔者在几年前就接触了Netty,也开发了个小项目。一直问题困扰自己,Netty使用场景是什么?怎么使用Netty?我们可以从dubbo中找到些答案。dubbo是高性能轻量级的RPC框架。
netty本质的功能负责网络传输,dubbo使用netty作为网络传输框架。说到网络传输自然离不开Socket,Socket是端到端的连接。dubbo是无中心化,每个client端都能与server端连接,每个client端同时又是server端。
dubbo的client端主要实现AbstractClient,NettyClient扩展继承了它。一般来说对于同一个server端来说(ip和port相同),只有一个client实例对应,也就是dubbo所说的共享连接。从DubboProtocol类实现可以找到
private ExchangeClient[] getClients(URL url){
//是否共享连接
boolean service_share_connect = false;
int connections = url.getParameter(Constants.CONNECTIONS_KEY, 0);
//如果connections不配置,则共享连接,否则每服务每连接
if (connections == 0){
service_share_connect = true;
connections = 1;
}
ExchangeClient[] clients = new ExchangeClient[connections];
for (int i = 0; i < clients.length; i++) {
if (service_share_connect){
clients[i] = getSharedClient(url);
} else {
clients[i] = initClient(url);
}
}
return clients;
}
从代码可以看出NettyClient实例并不轻,尽量减少NettyClient实例,这也是多个服务共享连接的原因之一。在设计类似NettyClient的时候,不要忘了实例化NettyClient的开销。一定不要忘记了缓存或者连接池的使用。大都优秀的框架都是运用了这两个思想。
private static final Logger logger = LoggerFactory.getLogger(AbstractClient.class);
protected static final String CLIENT_THREAD_POOL_NAME =“DubboClientHandler”;
private static final AtomicInteger CLIENT_THREAD_POOL_ID = new AtomicInteger();
private final Lock connectLock = new ReentrantLock();
//重连调度器
private static final ScheduledThreadPoolExecutor reconnectExecutorService= new ScheduledThreadPoolExecutor(2, new NamedThreadFactory(“DubboClientReconnectTimer”, true));
private volatile ScheduledFuture
dubbo与Netty的关系相关推荐
- 2. Dubbo和Zookeeper的关系
转自:https://www.cnblogs.com/hirampeng/p/9540243.html Dubbo建议使用Zookeeper作为服务的注册中心. 1. Zookeeper的作用: ...
- dubbo 与 zookeeper 的关系
Dubbo建议使用Zookeeper作为服务的注册中心. 1. Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip ...
- dubbo与zookeeper的关系
Dubbo建议使用Zookeeper作为服务的注册中心. 1. Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是 ...
- dubbo 部分 配置的关系-dubbo github 官方案例
1.dubbo 有一个 dubbo.properties 作为默认配置 默认配置可以在不添加新的配置的前提下使用dubbo dubbo.properties 的内容(来自 https://github ...
- Dubbo剖析-Netty粘包与半包问题(一)
一.前言 在客户端与服务端进行通信时候都会约定一个通讯协议,协议一般包含一个header和body,一个header和body组成了一次通讯的内容,一个通讯包.正常情况下客户端通过socket发送一个 ...
- 阿里面试官:给我说说Netty是如何在Dubbo中应用的?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:莫那 鲁道 来源:cnblogs.com/stateis0/ ...
- 看 Netty 在 Dubbo 中如何应用
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:莫那 鲁道 cnblogs.com/stateis0/p/9 ...
- Netty 在 Dubbo 中是如何应用的?
众所周知,国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟. 1. dubbo 的 Consumer 消费者如何使用 Netty 注意 ...
- 为什么要用dubbo,dubbo和zookeeper关系
为什么要用dubbo? 当网站规模达到了一定的量级的时候,普通的MVC框架已经不能满足我们的需求,于是分布式的服务框架 和流动式的架构就凸显出来了.单一应用架构 当网站流量很小时,只需一个应用,将所有 ...
最新文章
- AttributeError: module 'tensorflow_core.estimator' has no attribute 'inputs'
- 剑指offer(Java实现) 顺时针打印矩阵
- elasticsearch备份恢复(单机集群)
- (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- 机器学习之路: python 实践 word2vec 词向量技术
- OCR数据处理(上篇)+OCR数据处理(下篇)
- Attribute “singleton” must be declared for element type “bean”.
- Windows10共享文件夹、打印机,可是网络上显示“未授予用户在此计算机上的请求登录类型”的解决方案
- Serverless 如何做到快速发布?微应用平台技术实践
- 亿贝html5,亿贝CALL
- 【每日算法Day 77】LeetCode 第 181 场周赛题解
- Community Enterprise Operating System ISO 全镜像下载
- Red Giant Universe 3.0.2 for After Effects 破解版 Mac 红巨星宇宙特效插件包预设
- H.264中CBR VBR FIXQP
- 使用谷歌学术镜像查找英文论文、英文论文阅读
- 【外挂编程】外挂编程技术揭秘(一)
- 现实黑镜 | 面对死亡,你愿意将意识上传 获得“永生”吗?
- VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping
- Word 2016 撰写论文(4): 批量修改MathType公式字体大小
- JHM宽频电机新一代的“马达”