Redis实现消息发布订阅
对于一些解耦异步行为,往往会使用到MQ消息队列,但是很多时候可能由于条件受限没有可使用的消息队列供我们使用,那么则可以使用Redis来实现简单的消息发布订阅。
很简单,只需要三个类即可实现。
/**
* MQ频道主题配置
*/
@Configuration
public class RedisConfig {
@Bean
MessageListenerAdapter messageListenerAdapter(RedisMessageSubscriber subscriber) {
return new MessageListenerAdapter(subscriber);
}
@Bean
RedisMessageListenerContainer redisContainer(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
// 要监听的频道主题
container.addMessageListener(listenerAdapter, new ChannelTopic(GlobalConst.HELLO_CHANNEL));
return container;
}
}
/**
* 发布者
*/
@Component
public class RedisMessagePublisher {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void publish(String channel, String message) {
redisTemplate.convertAndSend(channel, message);
}
}
/**
* 订阅者
*/
@Component
public class RedisMessageSubscriber implements MessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
// 接收到消息后的处理逻辑
String channel = new String(message.getChannel());
String msg = new String(message.getBody());
if (GlobalConst.HELLO_CHANNEL.equals(channel)) {
System.out.println("Received message from channel: " + channel + "\nmessage: " + msg);
}
}
}
写一个接口,通过接口调用来触发消息的发布与订阅
显然,与传统RabbitMq不同的是,Redis所实现的消息队列订阅者是集成一体的。
也就是说无论有多少个channel topic,都是一个订阅者在消费发布者所通知的消息,因此需要在订阅者中根据不同的channel topic做出不同的行为(记得在配置类中添加你需要订阅的channel topic)
分类:
Middleware
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~