全站最硬核 百万字强肝RocketMq源码 火热更新中~(十六)


如果取锁失败,则判断超时时间是否设置正确,如果<=0,则抛出异常;如果设置合理,那么会打印日志,内容为:当前rpc调用设置的超时时长,等待的线程数,可用锁的数量,打印完日志后抛出异常。

可以看到单向调用其实指的就是没有返回值,监听器的future也只是返回一下请求是否成功,并没有返回值。

再下面是声明了三个handler,和我们自己写的netty demo里的serverHandler,clientHandler一样的

org.apache.rocketmq.remoting.netty.NettyRemotingServer.HandshakeHandler

第一个是HandshakeHandler 也就是握手建立连接的handler

@ChannelHandler.Sharable
class HandshakeHandler extends SimpleChannelInboundHandler<ByteBuf> {

内部实现了一个方法:channelRead0

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {

        // mark the current position so that we can peek the first byte to determine if the content is starting with
        // TLS handshake
        msg.markReaderIndex();

        byte b = msg.getByte(0);

        if (b == HANDSHAKE_MAGIC_CODE) {
            switch (tlsMode) {
                case DISABLED:
                    ctx.close();
                    log.warn("Clients intend to establish an SSL connection while this server is running in SSL disabled mode");
                    break;
                case PERMISSIVE:
                case ENFORCING:
                    if (null != sslContext) {
                        ctx.pipeline()
                            .addAfter(defaultEventExecutorGroup, HANDSHAKE_HANDLER_NAME, TLS_HANDLER_NAME, sslContext.newHandler(ctx.channel().alloc()))
                            .addAfter(defaultEventExecutorGroup, TLS_HANDLER_NAME, FILE_REGION_ENCODER_NAME, new FileRegionEncoder());
                        log.info("Handlers prepended to channel pipeline to establish SSL connection");
                    } else {
                        ctx.close();
                        log.error("Trying to establish an SSL connection but sslContext is null");
                    }
                    break;

                default:
                    log.warn("Unknown TLS mode");
                    break;
            }
        } else if (tlsMode == TlsMode.ENFORCING) {
            ctx.close();
            log.warn("Clients intend to establish an insecure connection while this server is running in SSL enforcing mode");
        }

        // reset the reader index so that handshake negotiation may proceed as normal.
        msg.resetReaderIndex();

        try {
            // Remove this handler
            ctx.pipeline().remove(this);
        } catch (NoSuchElementException e) {
            log.error("Error while removing HandshakeHandler", e);
        }

        // Hand over this message to the next .
        ctx.fireChannelRead(msg.retain());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值