如果我没有在 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 = "#"获取所有消息。