订阅发布配置类

  1. @Configuration
  2. public class RedisSubConfig {
  3. /**
  4. * 定义一个频道channel 订阅此频道都能收到消息
  5. */
  6. public static final String SUB_KEY = "chat";
  7. /**
  8. * redis消息监听器容器
  9. * 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器
  10. * 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理
  11. *
  12. * @param connectionFactory
  13. * @param listenerAdapter
  14. * @return
  15. */
  16. @Bean
  17. public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
  18. RedisMessageListenerContainer container = new RedisMessageListenerContainer();
  19. container.setConnectionFactory(connectionFactory);
  20. //注册一个频道 listenerAdapter与下面的方法对应 如果有多个频道就需要add多个
  21. container.addMessageListener(listenerAdapter, new PatternTopic(RedisSubConfig.SUB_KEY));
  22. return container;
  23. }
  24. /**
  25. * 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法,有多个消费类就要写多个这样的方法
  26. *
  27. * @param receiver 对应的消费者类对象
  28. * @return
  29. */
  30. @Bean
  31. public MessageListenerAdapter listenerAdapter(RedisReceiver receiver) {
  32. //绑定负责消费消息的类和方法名
  33. return new MessageListenerAdapter(receiver, "receiveMessage");
  34. }
  35. }

消息消费类

在配置好的类里的指定方法接收消息

  1. @Service
  2. @Slf4j
  3. public class RedisReceiver {
  4. public void receiveMessage(String message) {
  5. log.info("接收消息=====>:{}", message);
  6. }
  7. }

消息发送方法

使用redisTemplate的方法实现

  1. @SpringBootTest(classes = WebSocketMicroApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  2. public class WebSocketMicroTest {
  3. @Resource
  4. private RedisTemplate<String, Object> redisTemplate;
  5. @Test
  6. public void test1() {
  7. //指定通道发送消息
  8. redisTemplate.convertAndSend(RedisSubConfig.SUB_KEY, "hello");
  9. }
  10. }