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方法;
    其实,这里你可以看做是一种注册的结构,这样给客户端更多的开放接口,让客户端自己来控制一些内部的逻辑;

  • 相关阅读:
    Javascript异步编程的4种方法
    同步编程和异步编程
    关于js 异步回调的一些方法
    array的方法 没记住的
    阮一峰关于reduce 和transduce的博客
    CSS开发小技巧
    提升自己的一个网址
    asm.js 和 Emscripten 入门教程
    Koa -- 基于 Node.js 平台的下一代 web 开发框架
    C#中使用handsonetable的一个例子
  • 原文地址:https://www.cnblogs.com/big1987/p/9888525.html
Copyright © 2011-2022 走看看