Rabbitmq RabbitAdmin中的默认队列绑定

Rabbitmq RabbitAdmin中的默认队列绑定,rabbitmq,spring-amqp,Rabbitmq,Spring Amqp,现在,我们的应用程序有一个vhost、一个ConnectionFactory和一个RabbitAdmin,后面是多个队列和交换声明。现在我们需要一个新的vhost,因此需要一个ConnectionFactory&RabbitAdmin 创建新vhost之后,我面临的问题是,所有现有队列和exchange都将在vhost中创建。为了解决这个问题,我使用了declare by=“RabbitAdminName”属性,我可以在队列和exchange级别使用该属性。由于我的应用程序具有多个队列和交换,因

现在,我们的应用程序有一个vhost、一个ConnectionFactory和一个RabbitAdmin,后面是多个队列和交换声明。现在我们需要一个新的vhost,因此需要一个ConnectionFactory&RabbitAdmin

创建新vhost之后,我面临的问题是,所有现有队列和exchange都将在vhost中创建。为了解决这个问题,我使用了
declare by=“RabbitAdminName”
属性,我可以在队列和exchange级别使用该属性。由于我的应用程序具有多个队列和交换,因此我不希望通过在每个队列定义中添加declare by来干扰所有现有配置

是否有一种方法(更改默认行为的全局配置)告诉rabbit,只有预期的新队列将转到新的vhost/connectionFactory/RabbitAdmin,而不是已经存在的队列。任何帮助都是非常值得赞赏的(我正在寻找xml的减速方式)

默认情况下,所有队列、交换和绑定都由all声明 中的RabbitAdmin实例(具有auto startup=“true”) 应用程序上下文


参考资料:

目前没有此项的全局设置;您必须配置每个队列等,并设置
declare by
属性以将声明限制为显式管理员

因此,您需要对旧队列执行此操作,以便仅在旧vhost上声明这些队列

我们可以向管理员添加一个标志,以排除没有明确请求该管理员声明的任何bean


请。

我按如下方式解决了这个问题:

@Bean
public RabbitAdmin admin() {
    RabbitAdmin rabbitAdmin = new RabbitAdmin(cf1());
    rabbitAdmin.afterPropertiesSet();
    return rabbitAdmin;
}

@Bean
public RabbitAdmin admin2() {
    RabbitAdmin rabbitAdmin = new RabbitAdmin(cf2());
    rabbitAdmin.afterPropertiesSet();
    return rabbitAdmin;
}

@Bean
public Queue queue() {
    Queue queue = new Queue("foo");
    queue.setAdminsThatShouldDeclare(admin());
    return queue;
}

@Bean
public Exchange exchange() {
    DirectExchange exchange = new DirectExchange("bar");
    exchange.setAdminsThatShouldDeclare(admin());
    return exchange;
}

@Bean
public Binding binding() {
    Binding binding = new Binding("foo", DestinationType.QUEUE, exchange().getName(), "foo", null);
    binding.setAdminsThatShouldDeclare(admin());
    return binding;
}

发件人:

谢谢@gary。开罚单: