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的关系相关推荐

  1. 2. Dubbo和Zookeeper的关系

    转自:https://www.cnblogs.com/hirampeng/p/9540243.html Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用: ...

  2. dubbo 与 zookeeper 的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1. Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip ...

  3. dubbo与zookeeper的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是 ...

  4. dubbo 部分 配置的关系-dubbo github 官方案例

    1.dubbo 有一个 dubbo.properties 作为默认配置 默认配置可以在不添加新的配置的前提下使用dubbo dubbo.properties 的内容(来自 https://github ...

  5. Dubbo剖析-Netty粘包与半包问题(一)

    一.前言 在客户端与服务端进行通信时候都会约定一个通讯协议,协议一般包含一个header和body,一个header和body组成了一次通讯的内容,一个通讯包.正常情况下客户端通过socket发送一个 ...

  6. 阿里面试官:给我说说Netty是如何在Dubbo中应用的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:莫那 鲁道 来源:cnblogs.com/stateis0/ ...

  7. 看 Netty 在 Dubbo 中如何应用

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:莫那 鲁道 cnblogs.com/stateis0/p/9 ...

  8. Netty 在 Dubbo 中是如何应用的?

    众所周知,国内知名框架 Dubbo 底层使用的是 Netty 作为网络通信,那么内部到底是如何使用的呢?今天我们就来一探究竟. 1. dubbo 的 Consumer 消费者如何使用 Netty 注意 ...

  9. 为什么要用dubbo,dubbo和zookeeper关系

    为什么要用dubbo? 当网站规模达到了一定的量级的时候,普通的MVC框架已经不能满足我们的需求,于是分布式的服务框架 和流动式的架构就凸显出来了.单一应用架构 当网站流量很小时,只需一个应用,将所有 ...

最新文章

  1. AttributeError: module 'tensorflow_core.estimator' has no attribute 'inputs'
  2. 剑指offer(Java实现) 顺时针打印矩阵
  3. elasticsearch备份恢复(单机集群)
  4. (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
  5. 机器学习之路: python 实践 word2vec 词向量技术
  6. OCR数据处理(上篇)+OCR数据处理(下篇)
  7. Attribute “singleton” must be declared for element type “bean”.
  8. Windows10共享文件夹、打印机,可是网络上显示“未授予用户在此计算机上的请求登录类型”的解决方案
  9. Serverless 如何做到快速发布?微应用平台技术实践
  10. 亿贝html5,亿贝CALL
  11. 【每日算法Day 77】LeetCode 第 181 场周赛题解
  12. Community Enterprise Operating System ISO 全镜像下载
  13. Red Giant Universe 3.0.2 for After Effects 破解版 Mac 红巨星宇宙特效插件包预设
  14. H.264中CBR VBR FIXQP
  15. 使用谷歌学术镜像查找英文论文、英文论文阅读
  16. 【外挂编程】外挂编程技术揭秘(一)
  17. 现实黑镜 | 面对死亡,你愿意将意识上传 获得“永生”吗?
  18. VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping
  19. Word 2016 撰写论文(4): 批量修改MathType公式字体大小
  20. JHM宽频电机新一代的“马达”

热门文章

  1. CSP-S2022 游记
  2. 【Matlab绘图】
  3. 工业机器人 (1)-- 国内外研究现状
  4. 方舟投资(ark-invest)的十五大预测
  5. L1-066 猫是液体 (5 分)
  6. 2021-05-26wms系统的出库单价是这样自动生成的?
  7. 安卓外挂红外触摸屏的软件设计
  8. 解决burp-suite的中文乱码问题
  9. 三菱FX3U和5U气缸控制讲解
  10. html5 canvas 自定义画图裁剪图片