Redis实现消息发布订阅

news/2025/1/7 23:04:25/文章来源:https://www.cnblogs.com/ashet/p/18522832

对于一些解耦异步行为,往往会使用到MQ消息,但是很多时候可能由于条件受限没有可使用的消息队列供我们使用,那么则可以使用Redis来实现简单的消息发布订阅。

很简单,只需要三个类即可实现。

/*** MQ频道主题配置*/
@Configuration
public class RedisConfig {@BeanMessageListenerAdapter messageListenerAdapter(RedisMessageSubscriber subscriber) {return new MessageListenerAdapter(subscriber);}@BeanRedisMessageListenerContainer 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 {@Autowiredprivate RedisTemplate<String, String> redisTemplate;public void publish(String channel, String message) {redisTemplate.convertAndSend(channel, message);}
}
/*** 订阅者*/
@Component
public class RedisMessageSubscriber implements MessageListener {@Overridepublic 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826011.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TenSunS对接JumpServer:如何把主机自动同步到JumpServer

🦄概述后羿 - TenSunS(原ConsulManager)是一个使用Flask+Vue开发,基于Consul的WEB运维平台,弥补了Consul官方UI对Services管理的不足;并且基于Consul的服务发现与键值存储:实现了Prometheus自动发现多云厂商各资源信息;基于Blackbox对站点监控的可视化维护;以及对自建与…

不同阻尼比下的振动形式-代码

import numpy as np import matplotlib.pyplot as plt# 定义参数 zeta = 0.5 # 阻尼比 omega_n = 1.0 # 自然频率 omega_d = omega_n * np.sqrt(1 - zeta**2) # 阻尼频率 varphi = np.pi / 4 # 相位角# 定义时间变量 t = np.linspace(0, 10, 1000) # 从0到10秒,1000个点#…

TenSunS监控REDIS:使用一个redis_exporter监控所有的Redis实例

🦄概述后羿 - TenSunS(原ConsulManager)是一个使用Flask+Vue开发,基于Consul的WEB运维平台,弥补了Consul官方UI对Services管理的不足;并且基于Consul的服务发现与键值存储:实现了Prometheus自动发现多云厂商各资源信息;基于Blackbox对站点监控的可视化维护;以及对自建与…

TenSunS监控Mysql:如何优雅的使用一个mysqld_exporter监控所有的MySQL实例

🦄概述后羿 - TenSunS(原ConsulManager)是一个使用Flask+Vue开发,基于Consul的WEB运维平台,弥补了Consul官方UI对Services管理的不足;并且基于Consul的服务发现与键值存储:实现了Prometheus自动发现多云厂商各资源信息;基于Blackbox对站点监控的可视化维护;以及对自建与…

干货!ClickHouse 24.x 集群部署(去zookeeper方案)文末附看板

主机配置 3台 12核 24G 2T存储的服务器部署去zookeeper模式的ClickHouse 24.X集群。 Ubuntu(3台服务器都要执行安装) sudo apt-get install -y apt-transport-https ca-certificates curl gnupg curl -fsSL https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key…

KAFKA监控一条龙:史上最强Kafka看板+监控配置与告警规则

使用kafka_exporter监控多kafkakafka_exporter项目地址:https://github.com/danielqsj/kafka_exporter使用docker-compose部署多个kafka_exporter,每个exporter对接一个kafka。 注意:配置上每个kafka broker的地址,kafka3需要指定版本。version: 3.1 services:kafka-export…

Kubernetes Grafana看板更新啦!

K8S Dashboard CN 20240513 StarsL.cn Grafana官方地址: https://grafana.com/grafana/dashboards/13105 Grafana看板ID: 13105 kubernetes资源全面展示!包含K8S整体资源总览、微服务资源明细、Pod资源明细及K8S网络带宽,优化重要指标展示。 更新说明 v20240513更新了看板的所…

是时候扔掉Prometheus了,VictoriaMetrics全家桶入门与K8S部署

架构部署文件 项目仓库:https://github.com/starsliao/VictoriaMetrics本次将会部署以下组件: cd monit/master && kubectl apply -f .master├── 0.vm-single.yaml├── 1.kube-state-metrics_v2.12.0.yaml├── 1.node-exporter.yaml├── 1.vmagent.yaml├──…

基于 Astro 与 Directus 的新时代 JAMStack 博客实践

最近投入了大量摸鱼时间重构博客。现在大概告一段落了,向大家介绍一下整体的技术选型和具体实现的简要思路。 TLDR:JAMStack 实践,使用最新最潮的前端元框架 Astro,魔改 Astro Paper 主题,搭配 Headless CMS Directus,直通对接思源笔记内容同步,自建 SeaweedFS 分布式文…

【CodeForces训练记录】Codeforces Round 984 (Div. 3)

训练情况赛后反思 A题最简单的题愣神了,浪费了几分钟,其他方面正常表现 A题 相邻的两个差绝对值不能出现除了 \(5\) 和 \(7\) 以外的,直接模拟即可。 #include <bits/stdc++.h> #define int long longusing namespace std;void solve(){int n; cin>>n;vector<…