目錄
- 一、案例需求
- 二、基礎配置
- 三、代碼實現
直連型交換機也叫做定向交換機
,通過RoutingKey
綁定交換機與隊列直接的關系。
生產者源碼
消費者源碼
一、案例需求
- 在RabbitMQ控制臺中,聲明隊列
direct.queue1
和direct.queue2
。 - 在RabbitMQ控制臺中,聲明交換機
mt.direct
,將隊列direct.queue1
和direct.queue2
綁定到交換機上。 - 在生產者服務中,利用不同的
RoutingKey
向mt.direct
發送消息。 - 在消費者服務中,編寫兩個消費者方法,分別監聽隊列
direct.queue1
和direct.queue2
。
二、基礎配置
首先創建兩個隊列direct.queue1
和direct.queue2
在創建一個定向交換機mt.direct
,需要注意的是,在創建交換機的時候需要修改交換機的類型direct定向交換機。
交換機創建之后,點擊交換機的名稱,綁定交換機與隊列之間的關系。這里需要注意的是,綁定關系的時候需要指定RoutingKey
,并且RoutingKey有且只能填寫一個,如果有多個的時候需要再綁定依次
。
三、代碼實現
生產者
/**
* 給交換機發送消息(定向交換機)
* @throws InterruptedException
*/
@Test
public void directExchangeTest() throws InterruptedException {String exchangeName = "mt.direct";// String message = "紅色警報 ......";
// rabbitTemplate.convertAndSend(exchangeName, "red", message);// String message = "藍色警報 ......";
// rabbitTemplate.convertAndSend(exchangeName, "blue", message);String message = "黃色警報 ......";rabbitTemplate.convertAndSend(exchangeName, "yellow", message);
}
消費者
@RabbitListener(queues = "direct.queue1")
public void listenDirecttQueue1(String message) throws InterruptedException {System.out.println(String.format("消費者1,收到了direct.queue1: %s", message));
}@RabbitListener(queues = "direct.queue2")
public void listenDirecttQueue2(String message) throws InterruptedException {System.err.println(String.format("消費者2,收到了direct.queue2: %s", message));
}