Redis必知必会——发布订阅

银行卡消费的时候,银行往往会通过微信、短信或邮件通知用户交易的详细信息,这便是发布订阅模式。
Redis必知必会——发布订阅
我们可以使用下面的命令进行模拟

创新互联是一家集网站建设,福贡企业网站建设,福贡品牌网站建设,网站定制,福贡网站建设报价,网络营销,网络优化,福贡网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

先打开一个客户端1,输入命令

SUBSCRIBE chat

表示客户端1订阅一个名为chat的渠道,之后打开客户端2,输入命令

publish chat "Hello World!"

Redis必知必会——发布订阅
在Spring中,我们自定义接收消息的类,需要实现MessageListener接口,并实现接口定义的方法onMessage,代码如下。

public class redisMessageListener implements MessageListener {

    @SuppressWarnings("rawtypes")
    private RedisTemplate rt;

    @SuppressWarnings("rawtypes")
    public RedisTemplate getRt() {
        return rt;
    }

    @SuppressWarnings("rawtypes")
    public void setRt(RedisTemplate rt) {
        this.rt = rt;
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 获取消息
        byte[] body = message.getBody();
        // 使用值序列化器转换
        String msgBody = (String)getRt().getValueSerializer().deserialize(body);
        System.out.println(msgBody);
        // 获取channel
        byte[] channel = message.getChannel();
        // 使用字符串序列化器转换
        String channelStr = (String)getRt().getStringSerializer().deserialize(channel);
        System.out.println(channelStr);
        // 渠道名称转换
        String bytesStr = new String(pattern);
        System.out.println(bytesStr);
    }

}

这里我们没有使用注解,所以要去spring.xml中注册bean



    

实例化监听类之后还不行,还得给一个监听容器,在Spring中对应的类为RedisMessageListenerContainer,它可以用来监听Redis的发布订阅消息。同样在Spring.xml中进行配置



    
          
    
    
        
            
        
         
    
    
        
            
            
                
                
                    
                
            
        
    

这里配置了线程池,这个线程池将会持续的生存以等待消息传入,而这里配置了容器用id为redisMsgListener的Bean进行渠道chat的监听。当消息通过渠道chat方法的时候,就会使用id为redisMsgListener的Bean处理消息。

下面进行测试

public static void main(String[] args) {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
    RedisTemplate rt = applicationContext.getBean(RedisTemplate.class);
    String channel = "chat";
    // 向渠道chat发送消息
    rt.convertAndSend(channel, "Hello World!");
}

convertAndSend方法就是向指定的渠道发送消息。

输出

Hello World!
chat
chat

本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。同时我经过多年的收藏目前也算收集到了一套完整的学习资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、MySQL、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货,希望对想成为架构师的朋友有一定的参考和帮助

需要更详细架构师技能思维导图和以下资料的可以加一下技术交流分享群:“708 701 457”免费获取

Redis必知必会——发布订阅
Redis必知必会——发布订阅


网站栏目:Redis必知必会——发布订阅
文章地址:http://hbruida.cn/article/jojojg.html