目录
需求描述:原SpringBoot工程已经配置了一个RabbitMQ,现需求是再配置一个RabbitMQ,实现效果是不同RabbitMQ推送到不同的队列中,且互不干扰影响使用。
一、单个RabbitMQ配置
1.1、导入Maven坐标
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.10.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.4.4</version>
</dependency>
1.2、yaml配置
rabbitmq:
host: xx.xxx.xxx.xxx
port: xxxx
username: xxxx
password: xxxxxx
virtual-host: xxxx
publisher-returns: true
publisher-confirms: true
listener:
simple:
default-requeue-rejected: true
retry:
enabled: false
max-attempts: 3
initial-interval: 5000
1.3、java配置类
1.3.1、交换机配置
package com.ruoyi.report.config;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class ExchangeConfig {
public static final String ecoa_exchange = "ecoaExchange";
/**
* 1.定义direct exchange
* 2.durable="true" rabbitmq重启的时候不需要创建新的交换机
* 3.direct交换器相对来说比较简单,匹配规则为:如果路由键匹配,消息就被投送到相关的队列
*/
@Bean
public DirectExchange ecoaExchange() {
DirectExchange directExchange = new DirectExchange(ecoa_exchange, true, false);
return directExchange;
}
}
1.3.2、队列配置
package com.ruoyi.report.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/**
* @ClassName QueueConfig
* @Description
* @Author Mr.Huang
* @Date 2023/9/22 16:26
* @Version 1.0
**/
@Component
public class QueueConfig {
private static final String ecoa_file_upload_queue = "ecoa_file_upload_queue";
@Bean
public Queue ecoaFileUploadDispatchQueue() {
/**
durable="true" 持久化 rabbitmq重启的时候不需要创建新的队列
auto-delete 表示消息队列没有在使用时将被自动删除 默认是false
exclusive 表示该消息队列是否只在当前connection生效,默认是false
*/
return new Queue(ecoa_file_upload_queue, true, false, false);
}
}
1.3.3、绑定配置
package com.ruoyi.report.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/**
* @ClassName BindingConfig
* @Description
* @Author Mr.Huang
* @Date 2023/9/22 16:31
* @Version 1.0
**/
@Component
public class BindingConfig {
@Autowired
private QueueConfig queueConfig;
@Autowired
private ExchangeConfig exchangeConfig;
public static final String ECOA_file_upload_key = "ecoa_file_upload_key";
@Bean
public Binding ecoaFileUploadDispatchBinding() {
return BindingBuilder.bind(queueConfig.ecoaFileUploadDispatchQueue()).to(exchangeConfig.ecoaExchange()).with(ECOA_file_upload_key);
}
}
1.3.4、连接配置
package com.ruoyi.report.config;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName RabbitMqConfig
* @Description
* @Author Mr.Huang
* @Date 2023/9/22 16:14
* @Version 1.0
**/
@Configuration
public class RabbitMqConfig {
/**
* 连接工厂
*/
@Autowired
private ConnectionFactory connectionFactory;
/**
* 自定义rabbit template用于数据的接收和发送
* 可以设置消息确认机制和回调
*
* @return
*/
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
return template;
}
}