Spring Boot 系列 | 第六篇:使用Redis实现消息队列
这篇文章介绍SpringBoot使用Redis实现消息队列。
添加依赖
在pom.xml添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
创建消息接收者
public class Receiver {
private Logger logger = LoggerFactory.getLogger(getClass());
public void receiveMessage(String message) {
logger.info("Received :" + message);
}
}
这里声明了一个接受者,里面是提供了一个receiveMessage
方法,下面会使用MessageListenerAdapter
对这个接收者进行代理,通过反射把消息传到receiveMessage
中,也可以通过实现MessageListener
接口来实现消息接受者,这里为了简单使用代理的方式。
注入消息接收者
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("topic"));
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
//指定Receiver为代理接收类,接收消息方法为receiveMessage
return new MessageListenerAdapter(receiver, "receiveMessage");
}
@Bean
Receiver receiver() {
return new Receiver();
}
测试
编写一个Controller进行测试
@RestController
@RequestMapping("/message")
public class MessageController {
@Autowired
StringRedisTemplate stringRedisTemplate;
@PostMapping("/sendRedisMsg")
public void sendRedisMessage(String message) {
stringRedisTemplate.convertAndSend("topic", message);
}
}
这个Controller
使用了spring-data-reids
提供的StringRedisTemplate
发送消息
在Postman中访问这个接口:
可以看到控制台输出: