zoukankan      html  css  js  c++  java
  • rocketmq中的NettyRemotingClient类的简单分析


    rocketmq中的NettyRemotingClient类的简单分析
    Bootstrap handler = this.bootstrap.group(this.eventLoopGroupWorker).channel(NioSocketChannel.class)
    .option(ChannelOption.TCP_NODELAY, true)
    .option(ChannelOption.SO_KEEPALIVE, false)
    .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, nettyClientConfig.getConnectTimeoutMillis())
    .option(ChannelOption.SO_SNDBUF, nettyClientConfig.getClientSocketSndBufSize())
    .option(ChannelOption.SO_RCVBUF, nettyClientConfig.getClientSocketRcvBufSize())
    .handler(new ChannelInitializer<SocketChannel>() {
    @Override
    public void initChannel(SocketChannel ch) throws Exception {
    ChannelPipeline pipeline = ch.pipeline();
    if (nettyClientConfig.isUseTLS()) {
    if (null != sslContext) {
    pipeline.addFirst(defaultEventExecutorGroup, "sslHandler", sslContext.newHandler(ch.alloc()));
    log.info("Prepend SSL handler");
    } else {
    log.warn("Connections are insecure as SSLContext is null!");
    }
    }
    pipeline.addLast(
    defaultEventExecutorGroup,
    new NettyEncoder(),
    new NettyDecoder(),
    new IdleStateHandler(0, 0, nettyClientConfig.getClientChannelMaxIdleTimeSeconds()),
    new NettyConnectManageHandler(),
    new NettyClientHandler());
    }
    });

    分析:一个是initChannel是抽象方法,ChannelInitializer是一个抽象类,这里是对抽象类进行实现,创建了一个匿名类;
    这里的把匿名类通过handle方法进行赋值给AbstractBootstrap的handle属性,后面会使用到该对象,并调用该对象的initChannnel方法;
    其实,这里你可以看做是一种注册的结构,这样给客户端更多的开放接口,让客户端自己来控制一些内部的逻辑;

  • 相关阅读:
    利用idea里面的mysql插件进行导入sql文件
    JSTL标签
    deepin20系统下配置JAVA开发环境
    deepin20安装及问题解决
    SpringBoot 在项目启之后执行自定义方法的两种方式
    Nick 的经验书
    Java 经验书
    SpringBoot 经验书
    Linux 经验书
    在MacOS中启动SSH服务
  • 原文地址:https://www.cnblogs.com/big1987/p/9888525.html
Copyright © 2011-2022 走看看