<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在我們實際開發中到一個特定的時候是比如工作流到某個狀態時, 我們會向某某單位傳送訊息, 這時就會用到我們的訊息推播---rabbitmq
簡單畫一下:
首先我們瞭解下訊息佇列是由交換機exchange和佇列組合構成的,有三種形式
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
server:
port: 8021
spring:
#給專案來個名字
application:
name: rabbitmq-provider
#設定rabbitMq 伺服器
rabbitmq:
host: localhost
port: 5672
#確認訊息已傳送到交換機(Exchange)
publisher-confirm-type: correlated
#確認訊息已傳送到佇列(Queue)
publisher-returns: true
注意:我們需要建立兩個工程,一個生產者producer
、一個消費者comsumer
,生產者用來生產訊息,消費者用來消費生產者將訊息投遞到rabbitmq中的訊息。
兩個工程中的pom依賴一樣,yml也一樣,只需要將server.port
設定成不同的埠即可。這裡我們將生產者設定為8021
埠,消費者設定為8022
埠。
從上面的講解中我們知道,有交換機exchange
,有佇列queue
,有路由routing
,因此我們需要在生產者端將三者關聯起來,然後傳送訊息,這樣消費端才能收到訊息。
建立config工作類繫結關聯
@Configuration public class Config { public static String directRouting = "directRouting"; public static String directQueue = "directQueue"; public static String directExchange = "directExchange"; @Bean public Queue DirectQueue() { return new Queue(Config.directQueue,true); //true 是否持久 } @Bean DirectExchange DirectExchange() { return new DirectExchange(Config.directExchange); } @Bean Binding bindingDirect() { // BindingBuilder.bind(佇列A).to(交換機B).with(路由) 將佇列A繫結到交換機B,使用路由C傳遞訊息 return BindingBuilder.bind(DirectQueue()).to(DirectExchange()).with(directRouting); }
傳送訊息
@Autowired private RabbitTemplate rabbitTemplate; //使用RabbitTemplate,這提供了接收/傳送等等方法 @GetMapping("/sendDirectMsg") public String sendMsg() { Map<String,Object> map=new HashMap<String,Object>(); map.put("id",UUID.randomUUID().toString()); map.put("data","hello,i am direct msg!"); map.put("datetime",System.currentTimeMillis()); //交換機 路由 訊息(傳送訊息的時候不需要管佇列,因為佇列已經在DirectRabbitConfig中設定了,佇列應該是消費者關心的事情) rabbitTemplate.convertAndSend(DirectRabbitConfig.directExchange, DirectRabbitConfig.directRouting, map); return "ok"; }
第二個工程中: 接收訊息
@Component @RabbitListener(queues = "directQueue")//監聽的佇列名稱 directQueue,不需要管路由和交換機,因為這些是生產者管理的事情。消費者只需要關心佇列即可 public class DirectReceiver { @RabbitHandler public void handler(Map testMessage) { System.out.println("directReceiver消費者收到訊息 : " + testMessage.toString()); } }
到此這篇關於Rabbitmq訊息推播功能實現範例的文章就介紹到這了,更多相關Rabbitmq訊息推播內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45