Spring RabbitMQ -在运行时添加绑定



我一直遵循通过Spring设置rabbitMQ通信的指南https://spring.io/guides/gs/messaging-rabbitmq/#initial。队列、交换、绑定在应用程序启动时被声明和初始化。代码,很像教程:

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"但是,正如预期的那样,我想更改键,以便在运行时动态侦听。我知道这是可能的使用RabbitMQ Java客户端,通过简单地绑定一个通道多次。有没有办法通过春季AMQP来做到这一点?

参见RabbitAdminAPI:

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

例如。

你不听路由键:你听队列。路由密钥是发布者逻辑的一部分:您使用某些路由密钥向交换器发布消息。RabbitMQ代理已经决定将此消息放入哪个队列。因此,看看您对动态绑定和监听的期望是否符合AQMP协议的要求。

最新更新