文章目錄
- directRabbitmq
-
- 1、通過spring實作direct(直連)
- 2、發送消息
- 3、監聽隊列
參考文章連結
directRabbitmq
1、通過spring實作direct(直連)
配置檔案,建立隊列和交換機以及配置路由
@Configuration
public class DirectRabbitConfig {
//隊列 起名:TestDirectQueue
@Bean("testDirectQueue1")
public Queue testDirectQueue() {
// durable:是否持久化,預設是false,持久化隊列:會被存儲在磁盤上,當消息代理重新開機時仍然存在,暫存隊列:目前連接配接有效
// exclusive:預設也是false,隻能被目前建立的連接配接使用,而且當連接配接關閉後隊列即被删除。此參考優先級高于durable
// autoDelete:是否自動删除,當沒有生産者或者消費者使用此隊列,該隊列會自動删除。
// return new Queue("TestDirectQueue",true,true,false);
//一般設定一下隊列的持久化就好,其餘兩個就是預設false
return new Queue("testDirectQueue1");
}
//隊列 起名:TestDirectQueue2
@Bean("testDirectQueue2")
public Queue testDirectQueue2() {
// durable:是否持久化,預設是false,持久化隊列:會被存儲在磁盤上,當消息代理重新開機時仍然存在,暫存隊列:目前連接配接有效
// exclusive:預設也是false,隻能被目前建立的連接配接使用,而且當連接配接關閉後隊列即被删除。此參考優先級高于durable
// autoDelete:是否自動删除,當沒有生産者或者消費者使用此隊列,該隊列會自動删除。
// return new Queue("TestDirectQueue",true,true,false);
//一般設定一下隊列的持久化就好,其餘兩個就是預設false
return new Queue("testDirectQueue2");
}
//Direct交換機 起名:TestDirectExchange
@Bean("testDirectExchange")
DirectExchange testDirectExchange() {
// return new DirectExchange("TestDirectExchange",true,true);
return new DirectExchange("testDirectExchange",false,false);
}
//将隊列1綁定路由1
//綁定 将隊列和交換機綁定, 并設定用于比對鍵:TestDirectRouting
@Bean("testDirectRouting1")
Binding bindingDirect1() {
return BindingBuilder.bind(testDirectQueue()).to(testDirectExchange()).with("testDirectRouting1");
}
//将隊列1綁定路由2
@Bean("testDirectRouting2")
Binding bindingDirect2() {
return BindingBuilder.bind(testDirectQueue()).to(testDirectExchange()).with("testDirectRouting2");
}
//将隊列2綁定路由1
@Bean("testDirectRouting3")
Binding bindingDirect() {
return BindingBuilder.bind(testDirectQueue2()).to(testDirectExchange()).with("testDirectRouting1");
}
}
2、發送消息
@RestController
public class DirectRabbitController {
@Autowired
RabbitTemplate rabbitTemplate;
@GetMapping("/sendMessage1")
public String getMsg1(){
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "message: M A N ";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String, Object> manMap = new HashMap<>();
manMap.put("messageId", messageId);
manMap.put("messageData", messageData);
manMap.put("createTime", createTime);
rabbitTemplate.convertAndSend("testDirectExchange", "testDirectRouting1", manMap);
return "發送路由1成功";
}
@GetMapping("/sendMessage2")
public String getMsg2(){
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "message: M A N ";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String, Object> manMap = new HashMap<>();
manMap.put("messageId", messageId);
manMap.put("messageData", messageData);
manMap.put("createTime", createTime);
rabbitTemplate.convertAndSend("testDirectExchange", "testDirectRouting2", manMap);
return "發送路由2成功";
}
}
3、監聽隊列
@Component
public class DirectReceiver2 {
//監聽
@RabbitListener(queues = "testDirectQueue2")
@RabbitHandler
public void process(Message testMessage) {
System.out.println("DirectReceiver2消費者收到消息 : " + testMessage.toString());
}
}