我一直在按照指南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来实现这一点?
1条答案
按热度按时间des4xlb01#
请参阅
RabbitAdmin
API:例如,可以使用其它类型的设备。
你不听路由键:路由关键字是发布者逻辑的一部分:你发布了一个消息到交换机,其中包含一些路由关键字。RabbitMQ代理已经决定了将这个消息放置到哪个队列。因此,看看你对动态绑定和监听的期望是否是AQMP协议所能实现的。