Redis之消息队列

Redis之消息队列
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

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。

在这里插入图片描述

本文来源蹊源的奇思妙想,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/14689

发表评论