Spring RabbitMQ -在运行时添加绑定

cvxl0en2  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(210)

我一直在按照指南https://spring.io/guides/gs/messaging-rabbitmq/#initial通过Spring设置rabbitMQ通信。队列、交换、绑定在应用程序启动时声明并初始化。代码与教程非常相似:

public static final String SPRINGQUEUE = "springqueue";

    public static final String SPRINGEXCHANGE = "springexchange";

    @Bean
    Queue queue() {
        return new Queue(SPRINGQUEUE, false);
    }

    @Bean
    TopicExchange exchange() {
        return new TopicExchange(SPRINGEXCHANGE);
    }

    @Bean
    Binding binding(Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("routingkey1");
    }

    @Bean
    SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListener listener) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueueNames(SPRINGQUEUE);
        container.setMessageListener(listener);
        return container;
    }

    @Bean
    MessageListener createListener(Queue queue, TopicExchange exchange) {
        return new Listener(queue, exchange);
    }

正如预期的那样,它监听“routingkey1”,但是,我想在运行时动态地改变监听的键。我知道使用RabbitMQJava客户机,通过简单地多次绑定一个通道,这是可能的。有没有什么方法也可以通过springAMQP来实现这一点?

des4xlb0

des4xlb01#

请参阅RabbitAdmin API:

/**
 * Declare a binding of a queue to an exchange.
 * @param binding a description of the binding to declare.
 */
void declareBinding(Binding binding);

例如,可以使用其它类型的设备。
你不听路由键:路由关键字是发布者逻辑的一部分:你发布了一个消息到交换机,其中包含一些路由关键字。RabbitMQ代理已经决定了将这个消息放置到哪个队列。因此,看看你对动态绑定和监听的期望是否是AQMP协议所能实现的。

相关问题