Redis之消息队列

94 篇文章 9 订阅
68 篇文章 5 订阅

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。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值