rabbitmq topic模式设置#通配符情况下 消费者队列未接收消息问题排查解决

在这里插入图片描述

目录

说明

生产者配置
Exchange:topic_exchange_shcool
Routing key:topic.shcool.#

消费者代码配置
Exchange:topic_exchange_shcool
Routing key:topic.shcool.user

@PostConstruct
    public void twoRabbitInit() {
        //声明交换机
        twoRabbitAdmin.declareExchange(new TopicExchange("topic_exchange_shcool", true, false));
        //声明队列
        twoRabbitAdmin.declareQueue(new Queue("topic.shcool.user", true));
        //绑定队列及交换机
        twoRabbitAdmin.declareBinding(BindingBuilder.bind(new Queue("topic.shcool.user", true, false, false))
                .to(new TopicExchange(twoTopicExchange, true, false))
                .with("topic.shcool.user"));
    }

其实以上代码看着没有问题,意思是代码生成一个队列,并把【topic.shcool.user】队列和生产者的【topic_exchange_shcool】exchange绑定,但是生产者发送消息是通过【topic.shcool.#】通配符去发送的,所以在绑定队列和交换机的时候.with方法要设置好Routing key,并不是你队列的名字,Routing key要和消息生产者的Routing key保持一致,否则消费者即使将队列绑定到exchange也永远无法收到消息,正确代码如下:

@PostConstruct
    public void twoRabbitInit() {
        //声明交换机
        twoRabbitAdmin.declareExchange(new TopicExchange("topic_exchange_shcool", true, false));
        //声明队列
        twoRabbitAdmin.declareQueue(new Queue("topic.shcool.user", true));
        //绑定队列及交换机
        twoRabbitAdmin.declareBinding(BindingBuilder.bind(new Queue("topic.shcool.user", true, false, false))
                .to(new TopicExchange(twoTopicExchange, true, false))
                //不设置通配符 消息不会到队列里来
                .with("topic.shcool.#"));
    }

这样只要消费者的Exchange为【topic_exchange_shcool】,且队列名为topic.shcool.开头的,都能接收到消息

如果队列还消费不到消息,可能有以下情况:

1、是否与其他队列名起冲突,例如有两个同名队列,消息会被其他队列消费
2、rabbitmq图形界面上Exchange绑定关系是否还存在以前的,需要手动解除绑定
3、队列是否与通配符的Routing key绑定
在这里插入图片描述

就先说到这 \color{#008B8B}{ 就先说到这} 就先说到这
在下 A p o l l o \color{#008B8B}{在下Apollo} 在下Apollo
一个爱分享 J a v a 、生活的小人物, \color{#008B8B}{一个爱分享Java、生活的小人物,} 一个爱分享Java、生活的小人物,
咱们来日方长,有缘江湖再见,告辞! \color{#008B8B}{咱们来日方长,有缘江湖再见,告辞!} 咱们来日方长,有缘江湖再见,告辞!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值