Redis之消息队列

SpringBoot 结合redis实现消息队列功能

发布者:
配置连接工厂

  @Bean
    public StringRedisTemplate template(RedisConnectionFactory connectionFactory){
        return new StringRedisTemplate(connectionFactory);
    }

配置Redis template

@Autowired
private StringRedisTemplate stringRedisTemplate;


public void sendMessage(Object message) {
stringRedisTemplate.convertAndSend(this.productActiveMQQueue,"发送新消息");
}

订阅者:
创建连接工厂
绑定消息监听者和接收监听的方法
注册订阅者
计数器,控制线程

@Configuration
public class SubscriberConfig {
     //创建连接工厂
    @Bean
    public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                                   MessageListenerAdapter listenerAdapter){
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter,new PatternTopic("phone"));  //监听phone的订阅者
        return container;
    }

  //绑定监听者和监听方法
    @Bean
    public MessageListenerAdapter listenerAdapter(Receiver receiver){
        return new MessageListenerAdapter(receiver,"receiveMessage"); //这里选择指定的MessageListener和指定的处理方法
    }

 
  //计数器
    @Bean
    public CountDownLatch latch(){
        return new CountDownLatch(1);//指定了计数的次数 1
    }
}

可以根据类型 多用几个类 继承MessageListener 重写onMessage() 来解析不同类型的消息
即产生不同的订阅者

public class Receiver implements MessageListener {  

           private CountDownLatch id;
public Receiver(CountDownLatch id)
{
this.id=id;
}
    public void onMessage(Message message) {  
        //这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换,或者直接把onMessage方法的参数改成Message的子类TextMessage  
        TextMessage textMsg = (TextMessage) message;  
        System.out.println("接收到一个纯文本消息。");  
        try {  
            System.out.println("消息内容是:" + textMsg.getText());  
        } catch (JMSException e) {  
            e.printStackTrace();  
        }  
    }  
   
}  

redis相对于ActiveMQ (入队时数据较大时,redis性能较弱)
入队时,当数据比较小时Redis的性能要高于ActiveMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;
出队时,无论数据大小,Redis都表现出非常好的性能,而ActiveMQ的出队性能则远低于Redis。

猜你喜欢

转载自blog.csdn.net/weixin_40990818/article/details/83063524