• 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

  • 相关阅读:
    深度学习模型部署与优化:策略与实践;L40S与A100、H100的对比分析
    【Kubernetes】K8s笔记(十一):Ingress 集群进出流量总管
    VUE UI组件ui-libs.vercel.app 花了太长时间进行响应怎么解决?
    SpringSecurity
    C# 查找迷宫路径
    故障分析 | Greenplum 集群 standby 故障处理
    Win11 + docker + tensorflow serving 完成模型部署
    机器学习笔记 十四:k-近邻算法(kNN)的实现
    Vue.js入门教程(四)
    CodeBlocks C++开发环境的配置及使用
  • 原文地址:https://blog.csdn.net/m0_54849806/article/details/126327914