RabbitMQ - 實例操作

来源:http://www.cnblogs.com/leechenxiang/archive/2016/07/07/5649893.html
-Advertisement-
Play Games

以前在單項目中用過RabbitMQ,沒有問題 不過這次在分散式項目中使用RabbitMQ中有點搞糊塗了,但是實際上是沒有問題的,思路清晰就行 簡單看一下實際操作的示例吧: 資源文件中需要配置基本的rabbitMQ的屬性,如下: 然後要配置applicationContext-rabbitmq.xml ...


以前在單項目中用過RabbitMQ,沒有問題

不過這次在分散式項目中使用RabbitMQ中有點搞糊塗了,但是實際上是沒有問題的,思路清晰就行

簡單看一下實際操作的示例吧: 

資源文件中需要配置基本的rabbitMQ的屬性,如下:

1 #rabbitmq config
2 rabbitmq.host=192.168.1.188
3 rabbitmq.port=5672
4 rabbitmq.username=lee
5 rabbitmq.password=lee
6 rabbitmq.vhost=danger

然後要配置applicationContext-rabbitmq.xml,這個文件需要新建,當然你也可以在你的service.xml中編寫,但是為了配置清晰嘛

內容如下:

 1     <!-- 定義RabbitMQ的連接工廠 -->
 2     <rabbit:connection-factory id="connectionFactory"
 3         host="${rabbitmq.host}" 
 4         port="${rabbitmq.port}" 
 5         username="${rabbitmq.username}" 
 6         password="${rabbitmq.password}"
 7         virtual-host="${rabbitmq.vhost}" />
 8         
 9     <!-- 定義消息管理員 -->
10     <rabbit:admin connection-factory="connectionFactory"/>
11     
12     <!-- 生產者需要以下 -->
13     <!-- 定義交換機 -->
14     <rabbit:topic-exchange name="rest-content-exchange" durable="true" auto-declare="true">
15         <!-- 如果是2個不同的系統進行通知,那就手動在管理後臺進行綁定 -->
16         <rabbit:bindings>
17             <rabbit:binding queue="rest-sms-queue" pattern="rest.sms.#"/>
18             <rabbit:binding queue="rest-jpush-queue" pattern="rest.jpush.#"/>
19             <rabbit:binding queue="rest-sysmsg-queue" pattern="rest.sysmsg.#"/>
20         </rabbit:bindings>
21     </rabbit:topic-exchange>
22     
23     <!-- 定義rabbitTemplate -->
24     <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" exchange="rest-content-exchange"/>
25     
26     
27     <!-- 消費者需要以下 -->
28     <!-- 定義隊列 -->
29     <rabbit:queue name="rest-sms-queue" durable="true" auto-declare="true"/>
30     <rabbit:queue name="rest-jpush-queue" durable="true" auto-declare="true"/>
31     <rabbit:queue name="rest-sysmsg-queue" durable="true" auto-declare="true"/>
32     
33     <!-- 消費者 -->
34     <bean id="smsHandler" class="com.dingli.components.mq.handler.SmsHandler"></bean>
35     <bean id="jpushHandler" class="com.dingli.components.mq.handler.JpushHandler"></bean>
36     <bean id="saveSysMsgHandler" class="com.dingli.components.mq.handler.SaveSysMsgHandler"></bean>
37     
38     <!-- 隊列監聽 -->
39     <!-- TODO 註釋了後臺不會滾動顯示 -->
40     <rabbit:listener-container connection-factory="connectionFactory" acknowledge="none" >
41         <rabbit:listener ref="smsHandler" method="excute" queue-names="rest-sms-queue" />
42         <rabbit:listener ref="jpushHandler" method="excute" queue-names="rest-jpush-queue" />
43         <rabbit:listener ref="saveSysMsgHandler" method="saveMsgExcute" queue-names="rest-sysmsg-queue" />
44     </rabbit:listener-container>

這裡需要註意acknowledge,這個屬性預設是auto,如果消費者報錯了,會一直報錯,因為他是輪詢監聽的,可以修改為none或者manul

再看看實現的消費者以及助手類,助手類可以理解為service

監聽3個routing-key

 1 @Component
 2 public class SendMsgRestProducerImpl implements SendMsgRestProducer {
 3 
 4     @Autowired    
 5     private RabbitTemplate rabbitTemplate;
 6     
 7     @Override
 8     public void sendSMS(String mqSMSMessageJson) {
 9         rabbitTemplate.convertAndSend("rest.sms.send", mqSMSMessageJson);
10     }
11 
12     @Override
13     public void jpushContent(String mqJPushMessageJson) {
14         rabbitTemplate.convertAndSend("rest.jpush.send", mqJPushMessageJson);
15     }
16 
17     @Override
18     public void saveContent(String mqSysMessageJson) {
19         rabbitTemplate.convertAndSend("rest.sysmsg.send", mqSysMessageJson);
20     }
21     
22 }

這樣,直接調用componentImpl就行了!並且這3個都是非同步的

為什麼要使用RabbitMQ,那就是效率問題,有些主流程實現後,附流程你不在乎,成功不成功不影響,頂多重發一次,這樣的業務可以使用消息隊列

當然也有更多更複雜的也需要用的,這裡的業務場景就比較簡單了,好吧,看官們親拍~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • scalaz-stream是一個泛函數據流配件庫(functional stream combinator library),特別適用於函數式編程。scalar-stream是由一個以上各種狀態的Process串聯組成。stream代表一連串的元素,可能是自動產生或者由外部的源頭輸入,如:一連串滑鼠 ...
  • php中一個"異類"語法: $a && $b = $c; php中一個"異類"語法: $a && $b = $c; $a = 1;$b = 2;$c = 3;$a && $b = $c;echo "a:$a";echo "b:$b";echo "c:$c";這樣是a:1b:3c:3$a = 0;$b ...
  • eclispe中,點擊調試運行java項目,出現 cannot connect to VM 正常的運行項目,沒問題; 以為是jdk的安裝路徑等的問題,還有殺毒軟體等等,都沒有正常; 後來找到是winsock出問題了,運行cmd ,在命令行中執行 netsh winsock reset 再重啟機器,果 ...
  • ③最後將B上的1個圓盤移到C上。 ★★★有了代碼就好辦了★★★ 代碼奉上▼ 關於C++與Dev-C++的下載 ...
  • 後續補充更新 ...
  • 這篇文章是關於Java static關鍵字的使用,主要會介紹以下的內容: 1. static 的概念 2. static的各種應用 3. 總結 static 是什麼 static 顧名思義是靜態的意思。與this相對,static表示所修飾的部分是屬於類本身所有的,不依賴與某個具體的實例。 而thi ...
  • /*************以下源碼通過測試******************************/ package cn.jason.ios.images; import java.awt.FileDialog;import java.awt.Image;import java.io.Fil ...
  • Java最早的名稱叫"oak"後來改名叫"Java". Java最早是屬於"Sun"公司的, 後來被"Oracle"公司收購. 最原始的"oak"是為電視/烤箱/家用電子產品做互動式開發(互動式開發可以理解為"互動式操作", "互動式操作"類似於 現在的"智能家居")的. Java各版本: Java ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...