springBoot可以配置多个rabbitMQ服务器使用,只需要在使用时指定使用的实例就行,其他的与使用单个配置没有区别
一,配置文件:
spring.rabbitmq.first.host=10.10.1.203
spring.rabbitmq.first.port=5672
spring.rabbitmq.first.username=guest
spring.rabbitmq.first.password=guest
spring.rabbitmq.first.virtual-host=/
# spring.rabbitmq.listener.simple.acknowledge-mode=manual
spring.rabbitmq.primary.host=10.10.1.115
spring.rabbitmq.primary.port=5672
spring.rabbitmq.primary.username=guest
spring.rabbitmq.primary.password=guest
spring.rabbitmq.primary.virtual-host=/
二,代码配置
@Primary:不指定时使用默认配置
package com.koala.console.common.configuration;
import com.koala.console.apps.mclz.service.impl.TailWindServiceImpl;
import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class RabbitMQConfig {
@Primary
@Bean(name = "secondConnectionFactory")
public ConnectionFactory hospSyncConnectionFactory(
@Value("${spring.rabbitmq.first.host}") String host,
@Value("${spring.rabbitmq.first.port}") int port,
@Value("${spring.rabbitmq.first.username}") String username,
@Value("${spring.rabbitmq.first.password}") String password,
@Value("${spring.rabbitmq.first.virtual-host}") String virtualHost) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
connectionFactory.setPublisherReturns(true);
connectionFactory.setPublisherConfirms(true);
return connectionFactory;
}
@Bean(name = "primaryConnectionFactory")
public ConnectionFactory primaryPayConnectionFactory(
@Value("${spring.rabbitmq.primary.host}") String host,
@Value("${spring.rabbitmq.primary.port}") int port,
@Value("${spring.rabbitmq.primary.username}") String username,
@Value("${spring.rabbitmq.primary.password}") String password,
@Value("${spring.rabbitmq.primary.virtual-host}") String virtualHost) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
return connectionFactory;
}
@Primary
@Bean(name = "secondRabbitTemplate")
public RabbitTemplate firstRabbitTemplate(@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {
RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory);
return secondRabbitTemplate;
}
@Bean(name = "primaryRabbitTemplate")
public RabbitTemplate secondRabbitTemplate(@Qualifier("primaryConnectionFactory") ConnectionFactory connectionFactory) {
RabbitTemplate primaryRabbitTemplate = new RabbitTemplate(connectionFactory);
return primaryRabbitTemplate;
}
@Primary
@Bean(name = "secondContainerFactory")
public SimpleRabbitListenerContainerFactory hospSyncFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, @Qualifier("secondConnectionFactory")ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory,connectionFactory);
return factory;
}
@Bean(name = "primaryContainerFactory")
public SimpleRabbitListenerContainerFactory hPayFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,@Qualifier("primaryConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory,connectionFactory);
return factory;
}
@Primary
@Bean(name = "secondRabbitAdmin")
public RabbitAdmin rabbitAdmin(@Qualifier("secondConnectionFactory")ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
return rabbitAdmin;
}
@Bean(name = "primaryRabbitAdmin")
public RabbitAdmin primaryRabbitAdmin(@Qualifier("primaryConnectionFactory") ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
return rabbitAdmin;
}
@Primary
@Bean(name = "secondSimpleMessageListenerContainer")
public SimpleMessageListenerContainer messageListenerContainer(@Qualifier("secondConnectionFactory")ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
return container;
}
@Bean(name = "primarySimpleMessageListenerContainer")
public SimpleMessageListenerContainer primaryMessageListenerContainer(@Qualifier("primaryConnectionFactory") ConnectionFactory connectionFactory) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
container.setDefaultRequeueRejected(false);
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.start();
return container;
}
}
三,使用
@Slf4j
@Component
public class RabbitMQProducerImpl {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
@Qualifier("primaryRabbitTemplate")
private RabbitTemplate primaryRabbitTemplate;
}