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());
}
}