java - 如何使用 Spring Framework 在 RabbitMQ Java 配置类中设置多个主题?

标签 java spring rabbitmq

我正在尝试使用 Spring Framework 创建一个 RabbitMQ 配置类。该文档没有说明如何在 TopicExchange 中设置多个主题。我怎么做?到目前为止,我有这段 Java 代码,但我不清楚如何在下面的绑定(bind)方法中设置多个主题,因为它只返回一个绑定(bind)。如果我需要多个主题,是否不需要多个绑定(bind)?

@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 函数以返回列表而不是单个 Binding 对象来定义多个绑定(bind)。

@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了解更多详情。

关于java - 如何使用 Spring Framework 在 RabbitMQ Java 配置类中设置多个主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087332/

相关文章:

Java 打印服务 : PrintServiceLookup. lookupPrintServices 不返回网络打印机

java - 在 JMH 应用程序中使用 Spring Bean

python - Pika/RabbitMQ 连接问题 - 运行 VMWare CentOS 6.3

docker - might_not_write_file cluster_nodes.config etxtbsy

javascript - RabbitMQ amqp.node 与 Nodejs Express 集成

java - GlassFish JDBC 连接池

java - 如何在 Jetty-9 上使用证书执行自定义客户端身份验证?

java - 设置JSP页面重启CentOS

java - Spring Boot + Hibernate JPA 配置以使用 EntityManager

java - 使用 Jackson 将 Spring 3 ArrayList 序列化为 JSON 而无需包装到对象(无名称)