亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

spring 使用RabbitMQ進行消息傳遞的示例代碼

2024-07-14 08:43:08
字體:
來源:轉載
供稿:網友

前言

本系列Demo均以SpringBoot快速構建,基本包使用到lombok(一個便捷的對象構造工具 get/set)、spring-boot-starter-web,使用SpringBoot僅為了快速構建Sample項目,對于學習Spring的對應功能無影響。

我們希望你已經有一定的java基礎與了解一個自己喜歡的IDEA功能,謝謝。

GitHub

地址:https://github.com/UncleCatMySelf/Spring-Tutorial

學習

完成設置發布和訂閱消息的RabbitMQ AMQP服務器的過程。

構建

構建一個使用Spring AMQP發布消息的應用程序,RabbitTemplate并使用POJO訂閱消息MessageListenerAdapter。

創建Rabbit MQ消息接收器

使用任何基于消息傳遞的應用程序,您需要創建一個響應已發布消息的接收器。

@Slf4j@Componentpublic class Receiver { private CountDownLatch latch = new CountDownLatch(1); public void receiveMessage(String message){  log.info("Received < " + message + " >");  latch.countDown(); } public CountDownLatch getLatch(){  return latch; }}

Receiver是一個簡單的POJO,它定義了一種接收消息的方法。當您注冊它以接收消息時,您可以將其命名為任何您想要的名稱。

為方便起見,這個POJO也有一個CountDownLatch。這允許它發信號通知接收到消息。這是您不太可能在生產應用程序中實現的。

注冊監聽器并發送消息

Spring AMQP RabbitTemplate 提供了使用RabbitMQ發送和接收消息所需的一切。具體來說,你需要配置:

  • 消息偵聽器容器
  • 聲明隊列,交換以及它們之間的綁定
  • 用于發送一些消息以測試偵聽器的組件

Spring Boot會自動創建連接工廠和RabbitTemplate,從而減少您必須編寫的代碼量。

您將使用RabbitTemplate發送消息,并將Receiver使用消息偵聽器容器注冊,以接收消息。連接工廠驅動兩者,允許它們連接到RabbitMQ服務器。

@SpringBootApplicationpublic class RabbitmqApplication { static final String topicExchangeName = "spring-boot-exchange"; static final String queueName = "spring-boot"; @Bean Queue queue(){ return new Queue(queueName, false); } @Bean TopicExchange exchange(){ return new TopicExchange(topicExchangeName); } @Bean Binding binding(Queue queue,TopicExchange exchange){ return BindingBuilder.bind(queue).to(exchange).with("foo.bar.#"); } @Bean SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,   MessageListenerAdapter listenerAdapter){ SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.setQueueNames(queueName); container.setMessageListener(listenerAdapter); return container; } @Bean MessageListenerAdapter listenerAdapter(Receiver receiver){ return new MessageListenerAdapter(receiver, "receiveMessage"); } public static void main(String[] args) { SpringApplication.run(RabbitmqApplication.class, args).close(); }}

@SpringBootApplication 是一個便利注釋,添加了以下所有內容:

  • @Configuration 標記該類作為應用程序上下文的bean定義的源。
  • @EnableAutoConfiguration 告訴Spring Boot開始根據類路徑設置,其他bean和各種屬性設置添加bean。
  • 通常你會添加@EnableWebMvc一個Spring MVC應用程序,但Spring Boot會在類路徑上看到spring-webmvc時自動添加它。這會將應用程序標記為Web應用程序并激活關鍵行為,例如設置a DispatcherServlet。
  • @ComponentScan告訴Spring在包中尋找其他組件,配置和服務hello,允許它找到控制器。

該main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程序。您是否注意到沒有一行XML?也沒有web.xml文件。此Web應用程序是100%純Java,您無需處理配置任何管道或基礎結構。

listenerAdapter()方法中定義的bean在定義的容器中注冊為消息偵聽器container()。它將偵聽“spring-boot”隊列中的消息。因為Receiver該類是POJO,所以需要將其包裝在MessageListenerAdapter指定要調用的位置receiveMessage。

JMS隊列和AMQP隊列具有不同的語義。例如,JMS僅向一個使用者發送排隊的消息。雖然AMQP隊列執行相同的操作,但AMQP生成器不會直接向隊列發送消息。相反,消息被發送到交換機,交換機可以轉到單個隊列,或扇出到多個隊列,模仿JMS主題的概念。

消息監聽器容器和接收器bean是您監聽消息所需的全部內容。要發送消息,您還需要一個Rabbit模板。

該queue()方法創建AMQP隊列。該exchange()方法創建主題交換。該binding()方法將這兩者綁定在一起,定義RabbitTemplate發布到交換時發生的行為。

Spring AMQP要求將the Queue,the TopicExchange,和Binding聲明為頂級Spring bean才能正確設置。

在這種情況下,我們使用主題交換,并且隊列與路由密鑰綁定,foo.bar.#這意味著使用以路由鍵開頭的任何消息foo.bar.將被路由到隊列。

發送測試消息

測試消息由CommandLineRunner,他還等待接收器中的鎖存器并關閉應用程序上下文:

@Slf4j@Componentpublic class Runner implements CommandLineRunner { private final RabbitTemplate rabbitTemplate; private final Receiver receiver; public Runner(Receiver receiver, RabbitTemplate rabbitTemplate){  this.receiver = receiver;  this.rabbitTemplate = rabbitTemplate; } @Override public void run(String... strings) throws Exception {  log.info("Sending message....");  rabbitTemplate.convertAndSend(RabbitmqApplication.topicExchangeName,"foo.bar.baz","Hello from RabbitMQ!");  receiver.getLatch().await(10000, TimeUnit.MILLISECONDS); }}

請注意,模板將消息路由到交換機,其路由密鑰foo.bar.baz與綁定匹配。

可以在測試中模擬出運行器,以便可以單獨測試接收器。

運行程序,你應該看到如下輸出:

2018-12-03 10:23:46.779 INFO 10828 --- [   main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2018-12-03 10:23:46.782 INFO 10828 --- [   main] c.g.unclecatmyself.RabbitmqApplication : Started RabbitmqApplication in 3.61 seconds (JVM running for 4.288)2018-12-03 10:23:46.784 INFO 10828 --- [   main] com.github.unclecatmyself.Runner   : Sending message....2018-12-03 10:23:46.793 INFO 10828 --- [ container-1] com.github.unclecatmyself.Receiver  : Received < Hello from RabbitMQ! >2018-12-03 10:23:46.799 INFO 10828 --- [   main] o.s.a.r.l.SimpleMessageListenerContainer : Waiting for workers to finish.2018-12-03 10:23:47.813 INFO 10828 --- [   main] o.s.a.r.l.SimpleMessageListenerContainer : Successfully waited for workers to finish.2018-12-03 10:23:47.815 INFO 10828 --- [   main] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'2018-12-03 10:23:47.816 INFO 10828 --- [   main] o.s.a.r.l.SimpleMessageListenerContainer : Shutdown ignored - container is not active already

結尾

恭喜!您剛剛使用Spring和RabbitMQ開發了一個簡單的發布 - 訂閱應用程序。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97在线免费观看视频| 欧美一区在线直播| 亚洲第一视频在线观看| 精品视频一区在线视频| 日韩一区二区三区xxxx| 97超碰蝌蚪网人人做人人爽| 日本一欧美一欧美一亚洲视频| 富二代精品短视频| 中文字幕精品在线视频| 欧美多人乱p欧美4p久久| 在线视频欧美日韩| 久久久爽爽爽美女图片| 奇米成人av国产一区二区三区| 大桥未久av一区二区三区| 国产色婷婷国产综合在线理论片a| 欧美激情国产精品| 国产在线a不卡| 亚洲天堂av在线播放| 久久激情视频免费观看| 久久视频这里只有精品| 欧美日韩国产综合新一区| 91理论片午午论夜理片久久| 欧美成人精品不卡视频在线观看| 欧美高清视频在线观看| 欧美理论在线观看| 久久人人97超碰精品888| 亚洲国产精品一区二区三区| 国产情人节一区| 亚州成人av在线| 亚洲男人天堂久| 中文字幕自拍vr一区二区三区| 97国产一区二区精品久久呦| 91国内揄拍国内精品对白| 久久av红桃一区二区小说| 亚洲国产精品久久久久久| 国产精品亚洲一区二区三区| 日韩高清欧美高清| 色偷偷亚洲男人天堂| 最近2019年日本中文免费字幕| 性欧美视频videos6一9| 91精品国产91久久| 日韩经典一区二区三区| 96pao国产成视频永久免费| 亚洲欧美国产日韩中文字幕| 久久久噜噜噜久久久| 国产精品视频网址| 亚洲色图在线观看| 欧美人与物videos| 日韩精品极品在线观看播放免费视频| 成人黄色免费片| 午夜精品久久久久久久99热浪潮| 久久久久久久久电影| 成人网欧美在线视频| 91久久久久久久久| 国产亚洲欧洲黄色| 欧美一区二区大胆人体摄影专业网站| 91久久久久久久久久久| 亚洲第一页在线| 国产美女搞久久| 日韩欧美国产骚| 国产精品福利无圣光在线一区| www.精品av.com| 91精品国产九九九久久久亚洲| 中文字幕av一区中文字幕天堂| 午夜精品美女自拍福到在线| 国产精品久久97| 91日韩在线播放| 成人激情春色网| 最近的2019中文字幕免费一页| 一夜七次郎国产精品亚洲| 日av在线播放中文不卡| 日韩电影免费观看中文字幕| 精品久久久久久电影| 午夜精品美女自拍福到在线| 国内精品久久久久影院优| 亚洲欧美国产精品| 亚洲国产天堂久久综合网| 亚洲国产91色在线| 国产一区二区三区四区福利| 久久免费视频观看| 亚洲自拍偷拍福利| 欧美激情欧美狂野欧美精品| 欧美韩国理论所午夜片917电影| 一色桃子一区二区| 日韩av在线免费观看| 日韩免费观看网站| 国产精品影院在线观看| 成人免费淫片aa视频免费| 亚洲小视频在线| 亚洲第一精品自拍| 国产69精品久久久久99| 精品动漫一区二区| 亚洲毛片在线观看| 日韩中文字幕久久| 久久久亚洲网站| 欧美三级xxx| 91久久嫩草影院一区二区| 久久精品99国产精品酒店日本| 中文欧美日本在线资源| 欧日韩不卡在线视频| 久久久这里只有精品视频| 中文字幕亚洲一区| 日本一欧美一欧美一亚洲视频| 国产精品亚洲欧美导航| 97人人模人人爽人人喊中文字| 亚洲免费伊人电影在线观看av| 国产精品久久久久久久7电影| 亚洲精品网站在线播放gif| 欧美贵妇videos办公室| 91高清在线免费观看| 欧美在线不卡区| 欧美综合激情网| 久久久国产精品视频| 91免费视频国产| 国产精品91免费在线| 日韩国产高清污视频在线观看| 欧美在线视频导航| 久久影院模特热| 欧美日韩高清在线观看| 国产成人极品视频| 狠狠做深爱婷婷久久综合一区| 91亚洲一区精品| 91视频免费网站| 中文字幕亚洲欧美日韩在线不卡| 亚洲美女免费精品视频在线观看| 日韩av在线影视| 国产欧美久久一区二区| 中文字幕免费精品一区高清| 亚洲香蕉av在线一区二区三区| 日韩欧美亚洲国产一区| 国产免费一区二区三区在线能观看| 久久久久久久久久久人体| 国产美女久久精品香蕉69| 日韩欧美在线一区| 日产日韩在线亚洲欧美| 久久精品男人天堂| 久久天天躁狠狠躁夜夜爽蜜月| 91在线观看免费高清完整版在线观看| 最近2019中文字幕大全第二页| 亚洲激情视频网站| 亚洲自拍av在线| 大荫蒂欧美视频另类xxxx| 久久精品电影网| 久久久亚洲国产| 91免费福利视频| 国产欧美亚洲视频| 日韩在线欧美在线国产在线| 日韩精品在线免费观看| 国产亚洲视频中文字幕视频| 亚洲国产日韩精品在线| 精品国产户外野外| 国色天香2019中文字幕在线观看| 中文字幕亚洲一区二区三区五十路| 久久资源免费视频| 一区二区亚洲欧洲国产日韩| 日韩欧美中文字幕在线播放| 激情成人中文字幕| 亚洲精品wwww| 91九色国产视频| 精品人伦一区二区三区蜜桃网站| 欧美精品一二区| 91日韩在线播放| 91干在线观看| 黄色成人在线免费|