springboot集成redis进行消息订阅

1,消息发布者、消息处理者POJO、redis消息监听器容器以及redis监听器注入IOC容器
redis configuration
@Configuration //相当于xml中的beans
public class RedisConfig {

/**
 * redis消息监听器容器
 * 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器
 * 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理
 * @param connectionFactory
 * @param listenerAdapter
 * @return
 */
@Bean //相当于xml中的bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                        MessageListenerAdapter listenerAdapter) {

    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    //订阅了一个叫chat 的通道
    container.addMessageListener(listenerAdapter, new PatternTopic("chat"));
    //这个container 可以添加多个 messageListener
    return container;
}

/**
 * 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法
 * @param receiver
 * @return
 */
@Bean
MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
    //这个地方 是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage”
    //也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看
    return new MessageListenerAdapter(receiver, "receiveMessage");
}

/**redis 读取内容的template */
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
    return new StringRedisTemplate(connectionFactory);
}

}

MessageListenerAdapter通过反射使普通的POJO就可以处理消息。具体情况见MessageListenerAdapter的onMessage方法。

2,消息发布者
@EnableScheduling //开启定时器功能
@Component
public class MessageSender {

@Autowired
private StringRedisTemplate stringRedisTemplate;

@Scheduled(fixedRate = 2000) //间隔2s 通过StringRedisTemplate对象向redis消息队列chat频道发布消息
public void sendMessage(){
    stringRedisTemplate.convertAndSend("chat",String.valueOf(Math.random()));
}

}
3,普通的消息处理器POJO
@Component
public class MessageReceiver {

/**接收消息的方法*/
public void receiveMessage(String message){
    System.out.println("收到一条消息:"+message);
}

}

猜你喜欢

转载自blog.csdn.net/xljx_1/article/details/85252284