Redis 常被用作缓存服务器,它还可以用来实现消息队列,这里介绍 **SpringBoot+Redis实现简单的发布/订阅**
### 1、引入依赖
首先要在 pom 文件中引入相关依赖
```java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
## 2、创建监听器
创建 RedisListener 实现 `MessageListener`,重写 `onMessage` 方法
```java
@Slf4j
@Service
public class RedisListener implements MessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
log.info("onMessage,{}", message.toString());
String channel = new String(message.getChannel());
log.info("channel:" + channel);
String messageContext = new String(message.getBody());
log.info("消息内容:" + messageContext);
}
}
```
## 3、订阅 topic
```java
@Configuration
public class RedisConfig {
@Bean
RedisMessageListenerContainer redisMessageListenerContainer(
RedisConnectionFactory redisConnectionFactory, RedisListener redisListener) {
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
//订阅topic - subscribe
redisMessageListenerContainer.addMessageListener(redisListener,new ChannelTopic("lixj:message"));
return redisMessageListenerContainer;
}
}
```
## 4、测试类
编写简单的测试类
```java
@RestController
public class TestController {
@Resource
private StringRedisTemplate stringRedisTemplate;
@GetMapping(value = "/test/message/send")
public String send(@RequestParam String message) {
stringRedisTemplate.convertAndSend("lixj:message", message);
return "success";
}
}
```
测试结果:


如果是多个实例的话,每个实例都会收到消息:

多个实例在消费时,要注意消费时加锁,避免重复消费的情况。

SpringBoot+Redis实现简单的发布/订阅