日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot2.x-15 整合RabbitMQ 及RabbitMQ的基本使用

發布時間:2025/3/21 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot2.x-15 整合RabbitMQ 及RabbitMQ的基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 在Docker CE中安裝RabbitMQ
  • 依賴
  • 配置
  • 基本使用
    • 手工創建隊列,發送消息到指定的隊列
    • 自動創建隊列,發送消息到指定的隊列
    • 自動創建隊列,Exchange和隊列綁定
    • 自動創建隊列,Exchange和隊列綁定,接收指定key的消息
  • 代碼

概述

以 Spring Cloud實戰-06使用/actuator/bus-refresh端點手動刷新配置 + 使用Spring Cloud Bus自動更新配置中使用的幾個微服務工程為基礎,我們梳理下整合RabbitMQ及RabbitMQ的基本用法.

官方教程: https://spring.io/guides/gs/messaging-rabbitmq/
我們這里不是官方的Demo

后續開篇系統的介紹RabbitMQ,這里直接上Demo了先。

先說下RabbitMQ中的幾個名詞:

  • Broker:簡單來說就是消息隊列服務器實體,可以理解為一個節點
  • Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列
  • Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列
  • Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來
  • Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞
  • vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離
  • Producer:消息生產者,投遞消息的程序
  • Consumer:消息消費者,接受消息的程序
  • Channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務

在Docker CE中安裝RabbitMQ

Docker CE中安裝RabbitMQ


依賴

依賴必不可少嘛

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

配置


如果是默認的localhost和 5672端口 ,也可以不配。當然了,最好還是配上。


基本使用

工程結構 如下

為了方便,發送方直接使用了Controller作為發送發。 當然了,最好再新建個工程。

主要的注解 @RabbitListener


手工創建隊列,發送消息到指定的隊列

接收方代碼

package com.artisan.order.message;import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.Exchange; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.QueueBinding; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component;/*** 接收RabbitMQ消息的接收方*/ @Slf4j @Component public class MessageReceive {/*** queues指定對列名,需要先手工在RabbitMQ上建立隊列artisanQueue* @param message*/@RabbitListener(queues = "artisanQueue")public void processReceivedMsg(String message){log.info("artisanQueue Received MSG : {}", message);} }

需要提前在RabbitMQ上新建好artisanQueue這個隊列,否則報錯。如下

發送發測試

package com.artisan.order.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController @Slf4j public class MsgController {@Autowiredprivate AmqpTemplate amqpTemplate;@GetMapping("/sendMsg2ArtisanQueue")public void sendMsg(){log.info("begin to send msg to artisanQueue ....");this.amqpTemplate.convertAndSend("artisanQueue","[artisanQueue] I send one msg to u with RabbitMQ");} }

主要使用AmqpTemplate ,注入后,調用convertAndSend即可

啟動微服務,訪問 http://localhost:8081/sendMsg2ArtisanQueue

觀察消息隊列的變化 :

觀察日志:

2019-04-11 23:06:43.004 INFO 33612 --- [nio-8081-exec-1] c.a.order.controller.MsgController : begin to send msg to artisanQueue .... 2019-04-11 23:06:43.011 INFO 33612 --- [cTaskExecutor-1] c.artisan.order.message.MessageReceive : artisanQueue Received MSG : [artisanQueue] I send one msg to u with RabbitMQ

自動創建隊列,發送消息到指定的隊列

上面的例子手工創建隊列,是不是很崩潰,自動創建還是使用@RabbitListener,換個屬性 queuesToDeclare 即可

@RabbitListener(queuesToDeclare = @Queue("artisanQueue2"))

我們先刪掉 artisanQueue2 ,目前的消息隊列如下

接收方

MessageReceive 中新加個方法如下

/*** queuesToDeclare自動創建隊列* @param message*/@RabbitListener(queuesToDeclare = @Queue("artisanQueue2"))public void processReceivedMsg2(String message){log.info("artisanQueue2 Received MSG : {}", message);}

發送方 MsgController新建個方法如下

@GetMapping("/sendMsg2ArtisanQueue2")public void sendMsg2(){log.info("begin to send msg to artisanQueue2 ....");this.amqpTemplate.convertAndSend("artisanQueue2","[artisanQueue2] I send one msg to u with RabbitMQ");}

RabbitMQ管理頁面查看

日志:

2019-04-11 23:12:20.120 INFO 33612 --- [nio-8081-exec-4] c.a.order.controller.MsgController : begin to send msg to artisanQueue2 .... 2019-04-11 23:12:20.148 INFO 33612 --- [cTaskExecutor-2] c.artisan.order.message.MessageReceive : artisanQueue2 Received MSG : [artisanQueue2] I send one msg to u with RabbitMQ

自動創建隊列,Exchange和隊列綁定

確保不影響,先刪掉 artisanQueue3

接收方:

/*** 自動創建隊列,Exchange和隊列綁定* @param message*/@RabbitListener(bindings = @QueueBinding(value = @Queue("artisanQueue3"),exchange = @Exchange("artisanExchange3")))public void processReceivedMsg3(String message){log.info("artisanQueue3 Received MSG : {}", message);}

發送測試

@GetMapping("/sendMsg3ArtisanQueue3")public void sendMsg3(){log.info("begin to send msg to artisanQueue3 ....");this.amqpTemplate.convertAndSend("artisanQueue3","[artisanQueue3] I send one msg to u with RabbitMQ");}

點擊自動創建的消息隊列后,查看Bindings

日志:

2019-04-11 23:17:04.772 INFO 33612 --- [nio-8081-exec-7] c.a.order.controller.MsgController : begin to send msg to artisanQueue3 .... 2019-04-11 23:17:04.790 INFO 33612 --- [cTaskExecutor-2] c.artisan.order.message.MessageReceive : artisanQueue3 Received MSG : [artisanQueue3] I send one msg to u with RabbitMQ

自動創建隊列,Exchange和隊列綁定,接收指定key的消息

短信的消息,通過key ,僅發送到短信消息隊列中。 Email僅發送到Email的消息隊列中

接收方

/*** 自動創建隊列,Exchange和隊列綁定,接收指定key的消息* @param message*/@RabbitListener(bindings = @QueueBinding(value = @Queue("SMSQueue"),exchange = @Exchange("smsExchange"),key = "sms"))public void processSMSMsg(String message){log.info("SMSQueue Received MSG : {}", message);}/*** 自動創建隊列,Exchange和隊列綁定,接收指定key的消息* @param message*/@RabbitListener(bindings = @QueueBinding(value = @Queue("EmailQueue"),exchange = @Exchange("emailExchange"),key = "email"))public void processEmailMsg(String message){log.info("EmailQueue Received MSG : {}", message);}

發送方測試

@GetMapping("/sendSMSMsg")public void sendSMSMsg(){log.info("begin to send msg to sendSMSMsg ....");this.amqpTemplate.convertAndSend("smsExchange","sms","[SMSQueue] I send one msg to u with RabbitMQ");}@GetMapping("/sendEmailMsg")public void sendEmailMsg(){log.info("begin to send msg to sendEmailMsg ....");this.amqpTemplate.convertAndSend("emailExchange","email","[EmailQueue] I send one msg to u with RabbitMQ");}

啟動訪問 http://localhost:8081/sendEmailMsg

日志

2019-04-11 23:35:44.631 INFO 33612 --- [nio-8081-exec-7] c.a.order.controller.MsgController : begin to send msg to sendEmailMsg .... 2019-04-11 23:35:44.643 INFO 33612 --- [cTaskExecutor-3] c.artisan.order.message.MessageReceive : EmailQueue Received MSG : [EmailQueue] I send one msg to u with RabbitMQ

訪問 http://localhost:8081/sendSMSMsg

日志

2019-04-11 23:37:16.293 INFO 33612 --- [io-8081-exec-10] c.a.order.controller.MsgController : begin to send msg to sendSMSMsg .... 2019-04-11 23:37:16.308 INFO 33612 --- [cTaskExecutor-3] c.artisan.order.message.MessageReceive : SMSQueue Received MSG : [SMSQueue] I send one msg to u with RabbitMQ

代碼

https://github.com/yangshangwei/springcloud-o2o/tree/master/artisan_order

總結

以上是生活随笔為你收集整理的Spring Boot2.x-15 整合RabbitMQ 及RabbitMQ的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产xxxxxxxxx | 最新地址av| 国产三级在线看 | 日韩综合 | 亚洲欲色 | 国产一区二区播放 | 亚洲88av | 国产网红无码精品视频 | 国产三级观看 | 国产精品一区二区三区四区五区 | 亚洲免费自拍 | 麻豆做爰免费观看 | 欧美久久一级 | 精品在线观看一区二区 | 成年人免费看黄色 | 全国最大色 | 色爱视频 | 青娱乐av| 男女www| av大全免费观看 | 亚洲第一激情 | 国产三级在线免费 | 一区二区三区四区五区视频 | 他揉捏她两乳不停呻吟动态图 | 一色桃子juy758在线播放 | 日韩在线一区二区三区 | 丰满人妻一区二区三区四区53 | 四虎影视网 | 香港三级日本三级 | 久久神马影院 | 黄页av | 久色成人网 | 亚洲精品视屏 | av在线资源网 | 成人av自拍 | 天堂激情网 | av成人动漫 | 免费无遮挡无码永久在线观看视频 | 欧美成人a交片免费看 | 国产高清av在线 | 欧美精品一级在线观看 | 日韩欧美黄色网址 | 色欲AV无码精品一区二区久久 | 先锋av在线资源 | 久色视频在线播放 | 精品人妻伦一二三区久 | 成人高潮片免费 | 国产成人无码一区二区在线播放 | 国产视频第一区 | 欧美一区二区三区免 | 精品自拍视频在线观看 | 国产免费激情视频 | 法国经典free性复古xxxx | 成人午夜激情视频 | 久久黄色小说 | 在线看的免费网站 | 日韩啪 | 久久久久久久福利 | 337p粉嫩色噜噜噜大肥臀 | 丝袜中文字幕 | 成人免费视频免费观看 | 中文精品一区二区三区 | 久久久久久久久久久丰满 | 国产综合激情 | 国产精久久久久 | 精品一区二区三区久久久 | 欧美1314| 男人插入女人下面的视频 | 人妻无码久久一区二区三区免费 | 麻豆69 | 伊人www | 亚洲生活片 | 国产中文| 免费精品视频在线观看 | 囯产精品一品二区三区 | 91精品国产91久久久 | 亚洲情欲网 | 99福利| 国产精品视频www | 很黄很污的视频网站 | www精品国产 | 青青青在线免费观看 | 日韩羞羞| 黑人添美女bbb添高潮了 | 亚洲视频色图 | 人人人人爽 | 国产免费网 | 综合久久激情 | 亚洲性图一区二区三区 | 久久久久亚洲av片无码下载蜜桃 | a级片免费看 | 欧美三日本三级少妇三级99观看视频 | 久久久精品国产 | 女人扒开屁股让男人桶 | 亚洲女优在线播放 | 天堂素人 | 欧美日韩国产成人在线 | 国产色av| 善良的老师伦理bd中字 |