博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis必知必会——发布订阅
阅读量:5874 次
发布时间:2019-06-19

本文共 2137 字,大约阅读时间需要 7 分钟。

hot3.png

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

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

SUBSCRIBE chat

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

publish chat "Hello World!"

在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!chatchat

转载于:https://my.oschina.net/u/4142269/blog/3060031

你可能感兴趣的文章
从位图数据取得位图句柄
查看>>
Spark RDD、DataFrame原理及操作详解
查看>>
程序计数器、反汇编工具
查看>>
Android N: jack server failed
查看>>
007-Shell test 命令,[],[[]]
查看>>
关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
查看>>
pandas 按照某一列进行排序
查看>>
在WPF中如何使用RelativeSource绑定
查看>>
Map的深浅拷贝的探究
查看>>
XSLT语法 在.net中使用XSLT转换xml文档示例
查看>>
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
前端工程师的职业发展路线在哪?
查看>>
IOS 内存警告 Memory warning level
查看>>
[转]PAC Manager: Ubuntu 上强大的 SSH 帐号管理工具,可取代 SecureCRT_Miracle_百度空间...
查看>>
顺序容器 (2)string类型操作
查看>>
转载:我最近的研究成果(IGeometry.Project and IGeometry.SpatialReference)
查看>>
提示框
查看>>
HDOJ1233 畅通工程之一(最小生成树-Kruscal)
查看>>
another app is currently holding the yum lock;waiting for it to exit
查看>>