订阅发布配置类
@Configurationpublic class RedisSubConfig {/*** 定义一个频道channel 订阅此频道都能收到消息*/public static final String SUB_KEY = "chat";/*** redis消息监听器容器* 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器* 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理** @param connectionFactory* @param listenerAdapter* @return*/@Beanpublic RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);//注册一个频道 listenerAdapter与下面的方法对应 如果有多个频道就需要add多个container.addMessageListener(listenerAdapter, new PatternTopic(RedisSubConfig.SUB_KEY));return container;}/*** 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法,有多个消费类就要写多个这样的方法** @param receiver 对应的消费者类对象* @return*/@Beanpublic MessageListenerAdapter listenerAdapter(RedisReceiver receiver) {//绑定负责消费消息的类和方法名return new MessageListenerAdapter(receiver, "receiveMessage");}}
消息消费类
在配置好的类里的指定方法接收消息
@Service@Slf4jpublic class RedisReceiver {public void receiveMessage(String message) {log.info("接收消息=====>:{}", message);}}
消息发送方法
使用redisTemplate的方法实现
@SpringBootTest(classes = WebSocketMicroApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class WebSocketMicroTest {@Resourceprivate RedisTemplate<String, Object> redisTemplate;@Testpublic void test1() {//指定通道发送消息redisTemplate.convertAndSend(RedisSubConfig.SUB_KEY, "hello");}}
