两个应用都引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
发布者
/**
* @author hrui
* @date 2024/8/5 23:32
*/
@RestController
public class PublisherController {
@Autowired
private RedisMessagePublisher redisMessagePublisher;
// 发布消息接口
@GetMapping("/publish")
public String publishMessage() {
String message = "发布一条消息";
redisMessagePublisher.publish(message);
return "消息已发布!";
}
}
/**
* @author hrui
* @date 2024/8/5 23:31
*/
@Service
public class RedisMessagePublisher {
@Autowired
private RedisTemplate redisTemplate;
// 发布消息到指定的通道
public void publish(String message) {
redisTemplate.convertAndSend("my-topic", message);
System.out.println("发布消息: " + message + " 到通道: my-topic");
}
}
spring.application.name=fabu
server.port=8999
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
订阅者
@Configuration
public class RedisConfig {
// 配置Redis消息监听容器
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
// 订阅固定的通道 "my-topic"
container.addMessageListener(listenerAdapter, new ChannelTopic("my-topic"));
return container;
}
// 配置消息监听适配器,不需要指定方法名,默认调用handleMessage
@Bean
MessageListenerAdapter listenerAdapter(RedisMessageSubscriber subscriber) {
//指定方法名接收消息
return new MessageListenerAdapter(subscriber, "onMessage");
//return new MessageListenerAdapter(subscriber);//使用默认方法handleMessage
}
}
@Service
public class RedisMessageSubscriber {
// 使用默认方法名 handleMessage 处理消息
// public void handleMessage(String message, String channel) {
// System.out.println("接收到消息: " + message + " 来自通道: " + channel);
// }
public void onMessage(String message, String channel) {
System.out.println("接收到消息: " + message + " 来自通道: " + channel);
}
}
spring.application.name=dingyue
server.port=9000
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
这里只是简单介绍 处理方式有多种
- 实现
MessageListener
接口 :适合希望直接控制消息处理的类,并且需要实现onMessage
方法。 - 使用
MessageListenerAdapter
:适合将消息处理方法绑定到已有的类和方法上,不需要实现MessageListener
接口。