Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Spring框架在RabbitMQ Java配置类中设置多个主题?_Java_Spring_Rabbitmq - Fatal编程技术网

如何使用Spring框架在RabbitMQ Java配置类中设置多个主题?

如何使用Spring框架在RabbitMQ Java配置类中设置多个主题?,java,spring,rabbitmq,Java,Spring,Rabbitmq,我正在尝试使用Spring框架创建RabbitMQ配置类。文档没有说明如何在TopiceExchange中设置多个主题。我该怎么做?到目前为止,我有这段Java代码,但我不清楚如何在下面的绑定方法中设置多个主题,因为它只返回一个绑定。如果需要多个主题,是否不需要多个绑定 @Configuration @EnableRabbit public class MessageReceiverConfiguration { final static String queueName = "ide

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

@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
对象,可以定义多个绑定

@Bean
List<Binding> bindings() {

    return Arrays.AsList(BindingBuilder.bind(queue()).to(exchange()).with(topic1), 
                        BindingBuilder.bind(queue()).to(exchange()).with(topic2));
}
@Bean
列表绑定(){
将Arrays.AsList(BindingBuilder.bind(queue()).to(exchange()).with(topic1),
BindingBuilder.bind(queue()).to(exchange()).with(topic2));
}
提示:您不需要将队列和交换作为方法参数传递。您可以直接引用bean方法来传递exchange和queue的信息


有关更多详细信息。

这在我的项目中不起作用,但是当我单独创建所有构建器时,它就起作用了。你对此有何评论??我使用的是SpringBoot2.1.2。RELEASE@MustafaGüven在2.1.0.RELEASE I中实现了使用
声明文件
的功能,如下所示: