chaozhouchao 2024-03-01 14:51 采纳率: 0%
浏览 17

rabbitmq交换机绑定路由

为什么不能一次性为一个direct交换机绑定多个路由key?

在springboot项目中rabbitmq的配置文件中定义绑定交换机和队列的Bean:

(1)第一种方法

@Bean(name = "binding")
    public Binding getBinding(@Qualifier("directExchange") DirectExchange directExchange,@Qualifier("queue") Queue queue){
        return BindingBuilder.bind(queue).to(directExchange).with("a");
    }

上述代码可以为direct交换机绑定一个路由key到队列,在rabbitmq管理面板上可以看得到。

(2)第二种方法

@Bean(name = "binding")
    public List<Binding> getBinding05(@Qualifier("directExchange") DirectExchange directExchange, @Qualifier("queue") Queue queue){
        List<Binding> bindings = new LinkedList<>();
        String[] routingKeys = {"a","b"};
        for (String routingKey : routingKeys){
            Binding binding = BindingBuilder.bind(queue).to(directExchange).with(routingKey);
            bindings.add(binding);
        }
        return bindings;
    }

这种方法返回了一个Binding的集合,方法内部用String数组记录了多个路由key,并且通过循环来多次绑定不同的key。
理论上来说应该是行得通的,队列和direct交换机之间应该是有两个key绑定的。但是实际上这种绑定不奏效,在rabbitmq管理面板上没有这两个绑定。

为什么不能一次性为一个direct交换机绑定多个路由key呢?
BindingBuilder的with方法可以一次性接收多个路由key吗,比如

BindingBuilder.bind(queue).to(directExchange).with(key1,key2,key3)

请各位帮我解决疑惑。<抱拳>

  • 写回答

3条回答 默认 最新

  • 百锦再@新空间代码工作室 全栈领域优质创作者 2024-03-01 14:51
    关注

    在RabbitMQ中,一个Direct Exchange只能将一个消息发送到一个队列中,而不是多个队列。因此,无法一次性为一个Direct Exchange绑定多个路由键。

    在Spring Boot中,BindingBuilder的with方法只能接受一个路由键作为参数,无法一次性传入多个路由键。因此,在代码中循环绑定多个路由键也是无效的。

    解决这个问题的方法是为每个路由键创建一个单独的Binding对象,并将它们分别绑定到Direct Exchange和队列之间。例如:

    @Beanpublic List<
    Binding>
    getBindings(@Qualifier("
    directExchange"
    ) DirectExchange directExchange, @Qualifier("
    queue"
    ) Queue queue) {List<
    Binding>
    bindings = new LinkedList<
    >
    ();
    String[] routingKeys = {"
    key1"
    , "
    key2"
    , "
    key3"
    };
    for (String routingKey : routingKeys) {Binding binding = BindingBuilder.bind(queue).to(directExchange).with(routingKey);
    bindings.add(binding);
    }return bindings;
    }

    这样,每个路由键都会被单独创建一个Binding对象并绑定到Direct Exchange和队列之间。在RabbitMQ管理面板上就可以看到多个绑定了。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
    评论

报告相同问题?

问题事件

  • 创建了问题 3月1日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表