背景介紹
目前有一個Spring Boot項(xiàng)目,已經(jīng)接入一個RabbitMQ Broker,由于業(yè)務(wù)擴(kuò)展,需要新增一個RabbitMQ Broker進(jìn)行消費(fèi),由于單個Broker時(shí)通過Spring默認(rèn)配置進(jìn)行使用,因此需要做出修改文章來源地址http://www.zghlxwxcb.cn/news/detail-505656.html
Java客戶端開發(fā)Demo
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(IP_ADDRESS);
factory.setPort(PORT);
factory.setUsername("root");
factory.setPassword("root123");
factory.setVirtualHost("/");
// 創(chuàng)建鏈接
Connection connection = factory.newConnection();
// 創(chuàng)建信道,Connection 接口被用來創(chuàng)建一個Channel
Channel channel = connection.createChannel();
// 創(chuàng)建一個type="direct" 持久化、非自動刪除的交換機(jī)
channel.exchangeDeclare(QUEUE_NAME, "direct", true, false, null);
// 創(chuàng)建一個持久化、非排他的、非自動刪除的隊(duì)列
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
// 發(fā)送一條持久化的消息
String message = "hello world!";
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
// 關(guān)閉資源
channel.close();
connection.close();
單實(shí)例配置
- pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
- 增加properties配置
spring.rabbitmq.username=username
spring.rabbitmq.password=password
spring.rabbitmq.host=host
spring.rabbitmq.virtual-host=/
spring.rabbitmq.port=port
- 增加配置類
@Configuration
public class RabbitMqConfiguration {
@Bean
public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory,MessageConverter messageConverter){
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(messageConverter);
return factory;
}
@Bean
public MessageConverter messageConverter(){
ObjectMapper objectMapper = new ObjectMapper();
Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(objectMapper);
return jackson2JsonMessageConverter;
}
}
多實(shí)例配置
- 增加properties配置
# 默認(rèn)rabbit配置
spring.rabbitmq.username=username
spring.rabbitmq.password=password
spring.rabbitmq.host=host
spring.rabbitmq.virtual-host=/
spring.rabbitmq.port=port
# 第2個MQ配置
spring.rabbitmq.second.host=second.host
spring.rabbitmq.second.username=second.username
spring.rabbitmq.second.password=second.password
spring.rabbitmq.second.port=second.port
spring.rabbitmq.second.virtual-host=/
- 修改配置類
/**
* @Description:
* @Author: admin
* @Date: 2021/5/11 18:19
*/
@Configuration
public class RabbitMqConfiguration {
@Primary
@Bean(name = "rabbitConnectionFactory")
public ConnectionFactory rabbitConnectionFactory(
@Value("${spring.rabbitmq.host}") String host,
@Value("${spring.rabbitmq.port}") int port,
@Value("${spring.rabbitmq.username}") String username,
@Value("${spring.rabbitmq.password}") String password,
@Value("${spring.rabbitmq.virtual-host}") String virtualHost) {
return connectionFactory(host, port, username, password, virtualHost);
}
@Bean
public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(
@Qualifier("rabbitConnectionFactory") ConnectionFactory connectionFactory,
MessageConverter messageConverter) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(messageConverter);
return factory;
}
/**
* 定義連接
* @param host
* @param port
* @param username
* @param password
* @return
*/
@Bean(name = "secondConnectionFactory")
public ConnectionFactory secondConnectionFactory(
@Value("${spring.rabbitmq.second.host}") String host,
@Value("${spring.rabbitmq.second.port}") int port,
@Value("${spring.rabbitmq.second.username}") String username,
@Value("${spring.rabbitmq.second.password}") String password,
@Value("${spring.rabbitmq.second.virtual-host}") String virtualHost) {
return connectionFactory(host, port, username, password, virtualHost);
}
/**
* 聲明RabbitTemplate
* @param connectionFactory
* @return
*/
@Bean(name = "secondRabbitTemplate")
public RabbitTemplate dataadminmqRabbitTemplate(
@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate .setMessageConverter(new Jackson2JsonMessageConverter());
return rabbitTemplate ;
}
@Bean(name = "secondRabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory secondRabbitListenerContainerFactory(
@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory,
MessageConverter messageConverter) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(messageConverter);
return factory;
}
@Bean
public MessageConverter messageConverter(){
ObjectMapper objectMapper = new ObjectMapper();
Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(objectMapper);
return jackson2JsonMessageConverter;
}
/**
* 聲明連接工廠連接開發(fā)服務(wù)器
*
* @param host
* @param port
* @param username
* @param password
* @return
*/
public CachingConnectionFactory connectionFactory(String host, int port, String username,
String password, String virtualHost) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
return connectionFactory;
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-505656.html
到了這里,關(guān)于SpringBoot項(xiàng)目配置多個RabbitMQ解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!