SpringBoot整合RabbitMQ 實現(xiàn)五種消息模型
點擊上方藍(lán)色字體,選擇“置頂或者星標(biāo)”?
優(yōu)質(zhì)文章第一時間送達(dá)!
SpringBoot中使用RabbitMQ
搭建初始環(huán)境
引入依賴
????
????<dependency>
????????<groupId>org.springframework.bootgroupId>
????????<artifactId>spring-boot-starter-amqpartifactId>
????dependency>
配置配置文件
server:
??port:?9090
spring:
??application:
????#?微服務(wù)系統(tǒng)有意義,?養(yǎng)成好習(xí)慣,?先寫出來
????name:?rabbitmq-02-springboot
??rabbitmq:
????host:?127.0.0.1
????port:?5672
????username:?codingce
????password:?123456
????virtual-host:?/codingce
測試類 注入 rabbitTemplate
????//?注入?rabbitTemplate
????@Autowired
????private?RabbitTemplate?rabbitTemplate;
消息隊列RabbitMQ之五種消息模型
第一種直連模型使用
開發(fā)生產(chǎn)者
????/**
?????*?直連
?????*/
????@Test
????void?contextLoads()?{
????????rabbitTemplate.convertAndSend("hello",?"hello?word");
????}
開發(fā)消費者
/**
?*?@author?mxz
?*/
@Component
@RabbitListener(queuesToDeclare?=?@Queue("hello"))
public?class?HelloCustomer?{
????/**
?????*?@param?message
?????*/
????@RabbitHandler
????public?void?receivel(String?message)?{
????????System.out.println("message:?"?+?message);
????}
}
第二種work模型使用
開發(fā)生產(chǎn)者
????/**
?????*?work
?????*/
????@Test
????void?testWork()?{
????????for?(int?i?=?0;?i?10;?i++)?{
????????????rabbitTemplate.convertAndSend("work",?"work模型");
????????}
????}
開發(fā)消費者
/**
?*?第二種模型?work?模型
?*
?*?@author?mxz
?*/
@Component
public?class?WorkCustomer?{
????/**
?????*?第1個消費者
?????*
?????*?@param?message
?????*/
????@RabbitListener(queuesToDeclare?=?@Queue("work"))
????public?void?receivel(String?message)?{
????????System.out.println("message1?=?"?+?message);
????}
????/**
?????*?第2個消費者
?????*
?????*?@param?message
?????*/
????@RabbitListener(queuesToDeclare?=?@Queue("work"))
????public?void?receivel2(String?message)?{
????????System.out.println("message2?=?"?+?message);
????}
}
第三種 Fanout 廣播模型
開發(fā)生產(chǎn)者
????/**
?????*?fanout?廣播
?????*/
????@Test
????void?testFanout()?{
????????rabbitTemplate.convertAndSend("logs",?"",?"Fanout模型發(fā)送的消息");
????}
開發(fā)消費者
/**
?*?fanout
?*
?*?@author?mxz
?*/
@Component
public?class?FanoutCustomer?{
????@RabbitListener(bindings?=?{
????????????@QueueBinding(
????????????????????value?=?@Queue,??//?創(chuàng)建臨時隊列
????????????????????exchange?=?@Exchange(value?=?"logs",?type?=?"fanout")?????//?綁定的交換機
????????????)
????})
????public?void?receivel(String?message)?{
????????System.out.println("message1?=?"?+?message);
????}
????@RabbitListener(bindings?=?{
????????????@QueueBinding(
????????????????????value?=?@Queue,??//?創(chuàng)建臨時隊列
????????????????????exchange?=?@Exchange(value?=?"logs",?type?=?"fanout")?????//?綁定的交換機
????????????)
????})
????public?void?receive2(String?message)?{
????????System.out.println("message2?=?"?+?message);
????}
}
第四種 Route 路由模型
開發(fā)生產(chǎn)者
????/**
?????*?route?路由
?????*/
????@Test
????void?testRoute()?{
????????//?exchange?交換機名稱
????????rabbitTemplate.convertAndSend("directs",?"info",?"info的key的路由消息");
????}
開發(fā)消費者
/**
?*?@author?mxz
?*/
@Component
public?class?RouteCustomer?{
????@RabbitListener(bindings?=?{
????????????@QueueBinding(
????????????????????value?=?@Queue,?//?綁定臨時隊列
????????????????????exchange?=?@Exchange(value?=?"directs",?type?=?"direct"),?//?自定義交換機名稱和類型
????????????????????key?=?{"info",?"error",?"warn"}
????????????)
????})
????public?void?receivel(String?message)?{
????????System.out.println("message1?=?"?+?message);
????}
????@RabbitListener(bindings?=?{
????????????@QueueBinding(
????????????????????value?=?@Queue,?//?綁定臨時隊列
????????????????????exchange?=?@Exchange(value?=?"directs",?type?=?"direct"),?//?自定義交換機名稱和類型
????????????????????key?=?{"error"}
????????????)
????})
????public?void?receivel2(String?message)?{
????????System.out.println("message1?=?"?+?message);
????}
}
第五種 Topic 訂閱模型(動態(tài)路由模型)
開發(fā)生產(chǎn)者
????/**
?????*?topic?訂閱模式?動態(tài)路由
?????*/
????@Test
????void?testTopic()?{
????????rabbitTemplate.convertAndSend("topics",?"user.save",?"user.save?路由消息");
????}
開發(fā)消費者
/**
?*?訂閱模型
?*
?*?@author?mxz
?*/
@Component
public?class?TopicCustomer?{
????@RabbitListener(bindings?=?{
????????????@QueueBinding(
????????????????????value?=?@Queue,
????????????????????exchange?=?@Exchange(type?=?"topic",?name?=?"topics"),
????????????????????key?=?{"user.save",?"user.*"}
????????????)
????}
????)
????public?void?receivel(String?message)?{
????????System.out.println("message1"?+?message);
????}
????@RabbitListener(bindings?=?{
????????????@QueueBinding(
????????????????????value?=?@Queue,
????????????????????exchange?=?@Exchange(type?=?"topic",?name?=?"topics"),
????????????????????key?=?{"produce.#",?"order.#"}
????????????)
????}
????)
????public?void?receivel2(String?message)?{
????????System.out.println("message2"?+?message);
????}
}
文章已上傳gitee https://gitee.com/codingce/hexo-blog
項目地址github: https://github.com/xzMhehe/codingce-java
更多推薦內(nèi)容
↓↓↓
如果你喜歡本文
請長按二維碼,關(guān)注公眾號
轉(zhuǎn)發(fā)朋友圈,是對我最大的支持喲
以上,便是今天的分享,希望大家喜歡,覺得內(nèi)容不錯的,歡迎「分享」「贊」或者點擊「在看」支持,謝謝各位。
評論
圖片
表情
