1.啓動服務不默認先創建隊列的話,在啓動消費者時候,消費者服務監聽會找不到對應的隊列而報錯,啓動失敗
@Component
public class OrderRabbitMQConfig {
@Autowired
RabbitAdmin rabbitAdmin;
/**
* 派單隊列
*/
public static final String ORDER_DIC_QUEUE = "order_dic_queue";
/**
* 補單對接
*/
public static final String ORDER_CREATE_QUEUE = "order_create_queue";
/**
* 訂單交換機
*/
private static final String ORDER_EXCHANGE_NAME = "order_exchange_name";
/**
* 定義派單隊列
*/
@Bean
public Queue directOrderDicQueue() {
return new Queue(ORDER_DIC_QUEUE);
}
/**
* 定義補派單隊列
*/
@Bean
public Queue directCreateOrderQueue() {
return new Queue(ORDER_CREATE_QUEUE);
}
/**
* 定義訂單交換機
*/
@Bean
DirectExchange directOrderExchange() {
return new DirectExchange(ORDER_EXCHANGE_NAME);
}
/**
* 派單隊列與交換機綁定
*/
@Bean
Binding bindingExchangeOrderDicQueue() {
return BindingBuilder.bind(directOrderDicQueue()).to(directOrderExchange()).with("orderRoutingKey");
}
/**
* 補單隊列與交換機綁定
*/
@Bean
Binding bindingExchangeCreateOrder() {
return BindingBuilder.bind(directCreateOrderQueue()).to(directOrderExchange()).with("orderRoutingKey");
}
//創建初始化RabbitAdmin對象
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
// 只有設置爲 true,spring 纔會加載 RabbitAdmin 這個類
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
//創建交換機和對列
@Bean
public void createExchangeQueue (){
rabbitAdmin.declareExchange(directOrderExchange());
rabbitAdmin.declareQueue(directOrderDicQueue());
rabbitAdmin.declareQueue(directCreateOrderQueue());
}
}
#配置virtual-host虛擬主機
spring.rabbitmq.virtual-host=/zhang_rabbit
#ip地址
spring.rabbitmq.host=127.0.0.1
#用戶名 密碼
spring.rabbitmq.username=zhang
spring.rabbitmq.password=zhang
#連接端口號
spring.rabbitmq.port=5672