springboot2.0整合redis的发布和订阅
1.Maven引用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2.redis属性配置
spring.redis.database=0 spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=****** server.port=5555
3.设置监听相关对象
3.1接听对象
RedisReceiver可以是普通类或者继承MessageListener,普通类的写法如下,接收的时候只接收到消息,没有频道名
package com.example.redistest.config; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.stereotype.Component; @Component public class RedisReceiver { public void receiveMessage(String message) { // TODO 这里是收到通道的消息之后执行的方法 System.out.println(message); } }
继承MessageListener,就能拿到消息体和频道名。
package com.example.redistest.config; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.stereotype.Component; @Component public class RedisReceiver implements MessageListener { @Override public void onMessage(Message message, byte[] pattern) { System.out.println(new String(message.getBody())); System.out.println(new String(message.getChannel())); } }
3.2 配置监听适配器、消息监听容器
container.addMessageListener(listenerAdapter, new PatternTopic("channel:test"));
消息监听容器增加监听的消息,第一个参数是监听适配器,第2个参数是监听的频道。
package com.example.redistest.config; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.MessageListener; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; @Configuration @EnableCaching public class RedisCacheConfig { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); // 可以添加多个 messageListener,配置不同的交换机 container.addMessageListener(listenerAdapter, new PatternTopic("channel:test")); return container; } @Bean MessageListenerAdapter listenerAdapter(RedisReceiver receiver) { System.out.println("消息适配器1"); return new MessageListenerAdapter(receiver, "onMessage"); } @Bean StringRedisTemplate template(RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); } }
3.3 消息发送
package com.example.redistest.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import java.util.Date; @RequestMapping("/redis") @Controller public class RedisController { @Autowired StringRedisTemplate template; /** * 发布消息 * * @param id * @return */ @RequestMapping("/sendMessage/{id}") public String sendMessage(@PathVariable String id) { for(int i = 1; i <= 5; i++) { template.convertAndSend("channel:test", String.format("我是消息{%d}号: %tT", i, new Date())); } return ""; } }
测试
postman访问http://localhost:5555/redis/sendMessage/1
接收消息后打印
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探