调试笔记 — Redis 消息队列发布信息被消费者重复订阅多次牵扯到的 Tomcat 配置问题 [#00001]

最近在项目中发现了一个奇葩的 BUG ,当用户调用后台时,后台向消息队列中发布一条消息,这条消息会被监听器(消费者)监听到,有趣的事情就在这里,此时由于只发送了一条消息,照理说监听器应该只会触发一次,但是却总是订阅2次(有的客户服务器启动甚至会初始化好几次,不知具体原因),然后就不会再订阅了,当时向消息队列发布信息我是使用的 RedisTemplate 里面的 convertAndSend(channel,message) 方法(看了一遍发现并没有看出什么代码上的问题),于是我去看了一下源码并走了一下断点,发现程序在发布消息的时候确确实实只发布了一次,但是监听器却订阅了2次。

当时为了测试,特意写了一个跟下面所有代码片段差不多的内容

消息发布者

// Controller 的某个方法内容 用于向 "channel" 发布信息
// 此处使用的 RedisTemplate 对象
// 消息发布者
@RequestMapping("publishMsg")
public void publishMsg(){
    // 向 "channel" 发布一个信息 "这是我发送的一个消息"
    redisTemplate.convertAndSend("channel","这是我发送的一个消息");
}

消息订阅者 ( xxxConsumer )

// xxxListener 类,主要用于订阅向 "channel" 发布的信息
// 消息订阅者
public void handleMessage(Message message,byte[] pattern){
    // 输出 channel
    S
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值