Java 如何在Spring RabbitMQ项目中使用多个vHost?

Java 如何在Spring RabbitMQ项目中使用多个vHost?,java,spring,rabbitmq-exchange,spring-rabbit,Java,Spring,Rabbitmq Exchange,Spring Rabbit,我有以下两个配置类: @Configuration @EnableRabbit @Import({ LocalRabbitConfigA.class, CloudRabbitConfigA.class }) public class RabbitConfigA { @Autowired @Qualifier("rabbitConnectionFactory_A") private ConnectionFactory rabbitConnectionFactory;

我有以下两个配置类:

@Configuration
@EnableRabbit
@Import({ LocalRabbitConfigA.class, CloudRabbitConfigA.class })
public class RabbitConfigA {
    @Autowired
    @Qualifier("rabbitConnectionFactory_A")
    private ConnectionFactory rabbitConnectionFactory;

    @Bean(name = "admin_A")
    AmqpAdmin amqpAdmin() {
        return new RabbitAdmin(rabbitConnectionFactory);
    }

    @Bean(name = "Exchange_A")
    DirectExchange receiverExchange() {
        return new DirectExchange("Exchange_A", true, false);
    }
}

请注意,LocalRabbitConfigA和LocalRabbitConfigB类定义了连接到不同VHost的connectionFactory。
启动应用程序时(在Tomcat内),所有交换都在两个vhost中创建

问题是如何定义特定的交换/队列是由特定的ConnectionFactory创建的

因此,VHost A只包含Exchange\u A,VHost B只包含Exchange\u B?

请参阅

具体而言:

@Bean(name = "Exchange_B")
DirectExchange receiverExchange() {
    DirectExchange exchange = new DirectExchange("Exchange_B", true, false);
    exchange.setAdminsThatShouldDeclare(amqpAdmin());
    return exchange;
}

我们可以使用SimpleRoutingConnectionFactory实现这一点,其中我们为vhost创建多个连接工厂,并将其配置为SimpleRoutingConnectionFactory

从spring文档中:


我创建了一个git回购协议,展示了如何做到这一点:

我也发现了这一点,但不敢这么快回答我的问题。。。但无论如何,非常感谢!您介意分享配置类的完整代码吗。我正试图实现这样一个场景:我有两个vhost,但我被卡住了。@martinkimani抱歉,我无法再访问代码了。。。
@Bean(name = "Exchange_B")
DirectExchange receiverExchange() {
    DirectExchange exchange = new DirectExchange("Exchange_B", true, false);
    exchange.setAdminsThatShouldDeclare(amqpAdmin());
    return exchange;
}
public class MyService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void service(String vHost, String payload) {
        SimpleResourceHolder.bind(rabbitTemplate.getConnectionFactory(), vHost);
        rabbitTemplate.convertAndSend(payload);
        SimpleResourceHolder.unbind(rabbitTemplate.getConnectionFactory());
    }

}