spring boot / cloud (九) 使用rabbitmq消息中間件

来源:http://www.cnblogs.com/itkk/archive/2017/09/05/7477132.html
-Advertisement-
Play Games

spring boot / cloud (九) 使用rabbitmq消息中間件 前言 rabbitmq介紹: RabbitMQ是一個在AMQP基礎上完整的,可復用的企業消息系統。它可以用於大型軟體系統各個模塊之間的高效通信,支持高併發,支持可擴展。 amqp介紹: 即Advanced Message ...


spring boot / cloud (九) 使用rabbitmq消息中間件

前言

rabbitmq介紹:

RabbitMQ是一個在AMQP基礎上完整的,可復用的企業消息系統。它可以用於大型軟體系統各個模塊之間的高效通信,支持高併發,支持可擴展。

amqp介紹:

即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語言等條件的限制。Erlang中的實現有 RabbitMQ等。

思路

基於spring boot的特性連接rabbitmq,並作出如下樣例:

  • 配置

  • 發佈方樣例

  • 消費方樣例

實現

1.配置

引入maven依賴

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

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

編寫config配置類(預設情況下是不用做任何配置的,這裡有配置是因為,它預設是用的二進位做的消息傳輸,這裡的配置是改為json傳輸)

@Configuration
public class RabbitMqConfig {

  @Bean
  public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactoryPlus(
      SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory,
      Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
    rabbitListenerContainerFactory.setMessageConverter(jackson2JsonMessageConverter);
    return rabbitListenerContainerFactory;
  }

  @Bean
  public Jackson2JsonMessageConverter jackson2JsonMessageConverter(ObjectMapper xssObjectMapper) {
    return new Jackson2JsonMessageConverter(xssObjectMapper);
  }

}

編寫配置文件

spring.rabbitmq.host=192.168.134.100
spring.rabbitmq.port=5672
spring.rabbitmq.username=dev_udf-sample
spring.rabbitmq.password=1qazxsw2
spring.rabbitmq.virtual-host=/dev_udf-sample
spring.rabbitmq.template.retry.enabled=true #發送方是否重試
spring.rabbitmq.listener.retry.enabled=true #消費方是否重試

定義公共的消息類

public class RabbitmqMessage<T> implements Serializable {
  private static final long serialVersionUID = 1L;
  //消息ID
  private String id;
  ....其他自定義
}

2.發佈方樣例

創建Exchange,這裡使用的是DirectExchange,exchange主要是定義路由規則的,還有其他不同的路由規則實現,如:TopicExchange,他們都繼承至AbstractExchange

  @Bean
  public DirectExchange testExchange() {
    return new DirectExchange("test_exchange");
  }

使用AmqpTemplate發送非同步消息(RoutingKey則是指定消息的路由鍵,不同的路由鍵可被不同的消費方消費)

  @Autowired
  private AmqpTemplate amqpTemplate;
  
  //然後調用發送方法發送消息
  this.amqpTemplate.convertAndSend("test_exchange", "testRoutingKey", new RabbitmqMessage<String>("test"));

3.消費方樣例

創建消費隊列,死信隊列,以及與exchange的綁定關係

  //消費隊列
  @Bean
  public Queue testConsume() {
    //死信exchange與上面的定義方式一樣
    Map<String, Object> args = new HashMap<>();
    args.put("x-dead-letter-exchange","test_exchange_dlx");
    args.put("x-dead-letter-routing-key","testRoutingKey_dlx");
    return new Queue("test_consume", true, false, false, args);
  }
  
  //死信消費隊列
  @Bean
  public Queue testConsumeDlx() {
    return new Queue("test_consume_dlx");
  }
  
  //消費隊列綁定
  @Bean
  public Binding testConsumeBinding() {
    return new Binding("test_consume", DestinationType.QUEUE,
        "test_exchange","testRoutingKey", null);
  }
  
  //死信消費隊列綁定
  @Bean
  public Binding testConsumeDlxBinding() {
    return new Binding("test_consume_dlx", DestinationType.QUEUE,
        "test_exchange_dlx","testRoutingKey_dlx", null);
  }

消費消息

  @RabbitListener(queues = "test_consume")
  public void process(Message<String> message) {
    log.info(message);
  }

代碼倉庫 (博客配套代碼)

結束

以上演示了rabbitmq在spring boot中的配置,以及發送方和消費方的樣例,在後續的章節中,會找機會介紹rabbitmq的搭建以及配置.


想獲得最快更新,請關註公眾號

想獲得最快更新,請關註公眾號


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

-Advertisement-
Play Games
更多相關文章
  • 關於 Go 中 Map 類型和 Slice 類型的傳遞 Map 類型 先看例子 m1: 結果是 我們再修改如下 m2: 發現結果變成了 要理解這個問題,需要明確在 Go 中不存在引用傳遞,所有的參數傳遞都是值傳遞。 現在再來分析下,如圖: 可能有些人會有疑問,為什麼途中的 m 像是一個指針呢。查看 ...
  • 前面幾篇文章我們學習了怎麼定位元素,同時通過實例也展示了怎麼切換到iframe,怎麼輸入用戶名和密碼,怎麼點擊登錄按鈕,首先我們先回顧一下元素的基本操作。 1.點擊(滑鼠左鍵)頁面按鈕:click() 2.請空輸入框:clear() 3.輸入字元串:send_keys() 4.提交表單:submit ...
  • 第一件事 eclipse設置為自動提示 配置步驟: 1 Window Preferences Java Editor Content Assist 2 “Auto Activation triggers for java”這個選項就是指觸發代碼提示的的選項, 把“.”修改成".abcdefghijk ...
  • apache-tomcat-7.0.52\conf下server.xml文件 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 將埠從8080改成80 <Host a ...
  • 第一種方式:for-in迴圈 OC延續了C語言的for迴圈,在Swift中被徹底改造,我們無法再使用傳統形式的for迴圈了 遍曆數組和字典: 如上遍曆數組使用了2種方式 1、第一種方式是Swift中普通的for迴圈語法,在索引index和遍歷範圍0...6之間用關鍵字in,這裡要註意0...6的表示 ...
  • 之前做過一個測試,詳情見這篇文章《多線程 +1操作的幾種實現方式,及效率對比》,當時對這個測試結果很疑惑,反覆執行過多次,發現結果是一樣的: 1. 單線程下synchronized效率最高(當時感覺它的效率應該是最差才對); 2. AtomicInteger效率最不穩定,不同併發情況下表現不一樣:短 ...
  • @ResponseBody一定一定要加啊!!!!!!不加的話前臺報錯,後臺警告!!!!前臺:jquery.min.js:2 POST http://172.13.31.75:8080/kuaibeiPro/querySessionId 404 (Not Found)send @ jquery.min ...
  • 一:對象頭 HotSpot虛擬機中,對象在記憶體中存儲的佈局可以分為三塊區域:對象頭(Header)、實例數據(Instance Data)和對齊填充(Padding)。 HotSpot虛擬機的對象頭(Object Header)包括兩部分信息,第一部分用於存儲對象自身的運行時數據, 如哈希碼(Has ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...