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

  • 相关阅读:
    ssm集成--多模块
    ssm项目集成--单模块
    shiro的学习以及shiro集成spring
    RecyclerView的使用。
    RecyclerView 显示不全的问题.
    Android 中使用数据库作为存储,并随机发布的Demo。
    Fragment的两种加载方式。
    gradle生成的eclipse的web项目,在发布后,缺少jar包的情况。
    gradle 4,构建java web程序
    android 下载远程服务器文件。
  • 原文地址:https://www.cnblogs.com/big1987/p/9888525.html
Copyright © 2011-2022 走看看