如果我没有在 SpringBootApplication 中指定 Queue、TopicExchange、Binding,则不会发送消息
Message is not sending if I don't specify the Queue, TopicExchange, Binding in SpringBootApplication
我尝试发送消息如下:
rabbitTemplate.convertAndSend("my.exchange", "my.queue", "Test Message");
并尝试接收消息如下:
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "my.queue", durable = "true"), exchange = @Exchange(value = "my.exchange", durable = "true", type = ExchangeTypes.TOPIC)))
public void receiveAuditMessage(String message) {
log.info("Received <" + message + ">");
}
没用。
但是,如果我在@SpringBootApplication 中指定 Queue、TopicExchange、Binding,那么它工作正常。
@Bean
Queue queue() {
return new Queue("my.queue");
}
@Bean
TopicExchange exchange() {
return new TopicExchange("my.exchange");
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("my.queue");
}
SpringBootApplication中是否必须指定Queue、TopicExchange、Binding?
如果是,那么如何在SpringBootApplication中指定多个Queue、TopicExchange、Binding?
请帮帮我。谢谢
在第一种情况下,您正在创建队列和交换器,但没有用于绑定的路由键;您需要一个用于 TOPIC 交换的路由键...
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "my.queue", durable = "true"),
exchange = @Exchange(value = "my.exchange", durable = "true", type = ExchangeTypes.TOPIC),
key = "my.queue"))
public void receiveAuditMessage(String message) {
System.out.println("Received <" + message + ">");
}
或key = "#"
获取所有消息。
我尝试发送消息如下:
rabbitTemplate.convertAndSend("my.exchange", "my.queue", "Test Message");
并尝试接收消息如下:
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "my.queue", durable = "true"), exchange = @Exchange(value = "my.exchange", durable = "true", type = ExchangeTypes.TOPIC)))
public void receiveAuditMessage(String message) {
log.info("Received <" + message + ">");
}
没用。
但是,如果我在@SpringBootApplication 中指定 Queue、TopicExchange、Binding,那么它工作正常。
@Bean
Queue queue() {
return new Queue("my.queue");
}
@Bean
TopicExchange exchange() {
return new TopicExchange("my.exchange");
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("my.queue");
}
SpringBootApplication中是否必须指定Queue、TopicExchange、Binding? 如果是,那么如何在SpringBootApplication中指定多个Queue、TopicExchange、Binding?
请帮帮我。谢谢
在第一种情况下,您正在创建队列和交换器,但没有用于绑定的路由键;您需要一个用于 TOPIC 交换的路由键...
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "my.queue", durable = "true"),
exchange = @Exchange(value = "my.exchange", durable = "true", type = ExchangeTypes.TOPIC),
key = "my.queue"))
public void receiveAuditMessage(String message) {
System.out.println("Received <" + message + ">");
}
或key = "#"
获取所有消息。