Redis 常被用作缓存服务器,它还可以用来实现消息队列,这里介绍 SpringBoot+Redis实现简单的发布/订阅
首先要在 pom 文件中引入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
创建 RedisListener 实现 MessageListener
,重写 onMessage
方法
@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);
}
}
@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;
}
}
编写简单的测试类
@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";
}
}
测试结果:
如果是多个实例的话,每个实例都会收到消息:
多个实例在消费时,要注意消费时加锁,避免重复消费的情况。
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/springbootredis实现简单的发布订阅