redis发布订阅c接口_Redis必知必会——发布订阅

银行卡消费的时候,银行往往会通过微信、短信或邮件通知用户交易的详细信息,这便是发布订阅模式。

6f9dc3567ab54ea28d7f19c1d21cef99.png

我们可以使用下面的命令进行模拟

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

SUBSCRIBE chat

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

publish chat "Hello World!"
61e6c684b2042ba2bb20f00bf876ac1c.png

在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值