Redisson 3.11.3 - redis协议处理器(使用netty-client和redis-server交互)

.

public class RedisChannelInitializer extends ChannelInitializer<Channel> {

    public enum Type {PUBSUB, PLAIN}
    
    // ....
    
    @Override
    protected void initChannel(Channel ch) throws Exception {
        initSsl(config, ch); // 初始化ssl

        // 1、连接保存
        if (type == Type.PLAIN) { // 《文本型》协议
            /**
             * <pre>
             *     用途:
             *          1、创建RedisConnection
             *          2、把RedisConnection放入channel,key为 RedisConnection.CONNECTION
             * </pre>
             */
            ch.pipeline().addLast(new RedisConnectionHandler(redisClient)); // !!!
        } else { // !!!《pubsub型》协议
            /**
             * <pre>
             *     用途:
             *          1、创建RedisPubSubConnection
             *          2、把RedisPubSubConnection放入channel,key为 RedisConnection.CONNECTION
             * </pre>
             */
            ch.pipeline().addLast(new RedisPubSubConnectionHandler(redisClient));
        }
        
        ch.pipeline().addLast(
            /**
             * <per>
             *     用途:
             *          1、当收到《连接断开消息》时执行,检查是否断开
             *             1、没有断开,尝试重新连接
             *
             * </per>
             */
            connectionWatchdog,
            /**
             * <pre>
             *     编码器
             *     用途:
             *          1、处理 CommandData<?, ?> 类型的消息,编码消息
             * </pre>
             */
            CommandEncoder.INSTANCE,
            /**
             * <pre>
             *     编码器
             *     用途:
             *          1、处理 CommandsData 类型的消息,编码消息
             * </pre>
             */
            CommandBatchEncoder.INSTANCE,
            /**
             * <pre>
             *     用途:-- 队列化处理消息
             *          1、如果 QueueCommand 类型的消息,那么把消息放入 queue
             *          2、如果是首次发送
             *              1、注册监听器到 channelPromise
             *              2、触发发送
             *              3、当发送完成后自动触发发送下一条
             * </pre>
             */
            new CommandsQueue());
        
        if (pingConnectionHandler != null) {
            ch.pipeline().addLast(pingConnectionHandler);
        }

        // 注册解码器
        if (type == Type.PLAIN) { // 《文本型》协议
            ch.pipeline().addLast(new CommandDecoder(config.getExecutor(), config.isDecodeInExecutor()));
        } else { // !!!《pubsub型》协议
            ch.pipeline().addLast(new CommandPubSubDecoder(config.getExecutor(), config.isKeepPubSubOrder(), config.isDecodeInExecutor()));
        }
    }
    
    // ....
    
}

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值