如何使用 Spring 框架在 RabbitMQ Java 配置 class 中设置多个主题?
How to setup multiple topics in a RabbitMQ Java config class using Spring Framework?
我正在尝试使用 Spring 框架创建 RabbitMQ 配置 class。该文档没有说明如何在 TopicExchange 中设置多个主题。我怎么做?到目前为止,我有这个 Java 代码,但我不清楚如何在下面的绑定方法中设置多个主题,因为它只有 returns 一个绑定。如果我需要多个主题,是否不需要多个绑定?
@Configuration
@EnableRabbit
public class MessageReceiverConfiguration {
final static String queueName = "identity";
final static String topic1 = "NewUserSignedUp";
final static String topic2 = "AccountCreated";
@Autowired
RabbitTemplate rabbitTemplate;
@Bean
Queue queue() {
return new Queue(queueName, false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("DomainEvents");
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
// How to setup multiple topics?
return BindingBuilder.bind(queue).to(exchange).with(topic1);
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
return container;
}
@Bean
MessageReceiver receiver() {
return new MessageReceiver();
}
@Bean
MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
您可以通过将 Binding
函数更改为 return 列表而不是单个 Binding
对象来定义多个绑定。
@Bean
List<Binding> bindings() {
return Arrays.AsList(BindingBuilder.bind(queue()).to(exchange()).with(topic1),
BindingBuilder.bind(queue()).to(exchange()).with(topic2));
}
提示:您不需要将队列和交换作为方法参数传递。可以直接引用bean的方法来传递exchange和queue的信息。
Refer documentation了解更多详情。
List<Binding> bindings()
spring boot 2.+ 版本不支持。
这个有效;
@Bean
public Declarables bindings() {
return new Declarables(
BindingBuilder
.bind(bookingAddQueue())
.to(bookingExchange())
.with("add")
.noargs(),
BindingBuilder
.bind(bookingEditQueue())
.to(bookingExchange())
.with("edit")
.noargs());
}
我正在尝试使用 Spring 框架创建 RabbitMQ 配置 class。该文档没有说明如何在 TopicExchange 中设置多个主题。我怎么做?到目前为止,我有这个 Java 代码,但我不清楚如何在下面的绑定方法中设置多个主题,因为它只有 returns 一个绑定。如果我需要多个主题,是否不需要多个绑定?
@Configuration
@EnableRabbit
public class MessageReceiverConfiguration {
final static String queueName = "identity";
final static String topic1 = "NewUserSignedUp";
final static String topic2 = "AccountCreated";
@Autowired
RabbitTemplate rabbitTemplate;
@Bean
Queue queue() {
return new Queue(queueName, false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("DomainEvents");
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
// How to setup multiple topics?
return BindingBuilder.bind(queue).to(exchange).with(topic1);
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
return container;
}
@Bean
MessageReceiver receiver() {
return new MessageReceiver();
}
@Bean
MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
您可以通过将 Binding
函数更改为 return 列表而不是单个 Binding
对象来定义多个绑定。
@Bean
List<Binding> bindings() {
return Arrays.AsList(BindingBuilder.bind(queue()).to(exchange()).with(topic1),
BindingBuilder.bind(queue()).to(exchange()).with(topic2));
}
提示:您不需要将队列和交换作为方法参数传递。可以直接引用bean的方法来传递exchange和queue的信息。
Refer documentation了解更多详情。
List<Binding> bindings()
spring boot 2.+ 版本不支持。
这个有效;
@Bean
public Declarables bindings() {
return new Declarables(
BindingBuilder
.bind(bookingAddQueue())
.to(bookingExchange())
.with("add")
.noargs(),
BindingBuilder
.bind(bookingEditQueue())
.to(bookingExchange())
.with("edit")
.noargs());
}