在Spring AMQP RabbitMQ代码中,发送方是否没有交换类型?

时间:2018-03-15 14:53:01

标签: java rabbitmq spring-amqp

我在RabbitMQ中有一个基本问题。对于Spring AMQP,在XML配置和使用注释的Java配置中,所使用的交换类型仅在侦听器侧是已知的。我的意思是,只有消费者配置代码包含正在使用的交换类型(主题/直接/扇出)。在发送方,我们将 -

amqpTemplate.convertAndSend("exchange_name", "routing_key",sampleMessage);

因此,发送者代码不会被打扰或意识到它所发送到的交换的类型(主题/直接/扇出)吗?

在python的情况下,我们在发送方,

 channel.exchange_declare(exchange='logs',
                     exchange_type='fanout')

所以在这里,发送者知道交换的类型。但是在Spring的情况下,交换名是否可用?

1 个答案:

答案 0 :(得分:1)

一般情况下,发送方并不需要知道交换类型,但发送到扇出意味着路由密钥被忽略,因此可以是任何值。

您可以按如下方式声明交换:

@Bean
public FanoutExchange exchange() {
    return new FanoutExchange("logs");
} 

如果有@RabbitAdmin bean,将根据bean类型自动声明交换。 Spring Boot自动配置管理员;如果你没有使用启动,你需要声明自己的启动。