1. 程式人生 > >RabbitMQ在SpringBoot中使用的一些注意點

RabbitMQ在SpringBoot中使用的一些注意點

在使用SpringBoot中,筆者使用到了RabbitMQ,其中踩了不少地雷,經過些許的刻版終於把它調通了,

筆者主要說的是從生產者生產資料併發送給消費者到後者接收並處理資料這麼一個全過程,我這裡的資料指的是實體物件.生產者和消費者是處在兩個不同的專案中的.

首先說明下整個過程.

在 Spring-AMQP 中比較重要的類就是 Message ,因為要傳送的訊息必須要構造成一個 Message 物件來進行傳輸。Message 物件包括兩部分 Body 和 Properties
訊息生產者構造好 Message 之後,就會將 Message 傳送到指定的 Exchange (交換機),再根據 Exchange 的型別及 routing-key 將訊息路由到相應的 queue 中,最後被監聽該 queue 的消費者消費.

tips:

1,當處理的資料是實體類的時候,需要特別注意,它是需要轉換的,否則會拋錯的.筆者指的是使用

1,生產者負責傳送如右邊:RabbitTemplate rabbitTemplate.convertAndSend("testDirectExchange","key1", new Teacher("whc_teacher"));

2,消費者這邊有監聽器,繫結好佇列,交換機和路由.如下,在消費者類頭配置.

@RabbitListener(
        containerFactory = "simpleRabbitListenerContainerFactory",
        bindings = @QueueBinding(
                value = @Queue(value = "testDirectQueue1",durable = "true"),
                exchange = @Exchange(value = "testDirectExchange",type = ExchangeTypes.DIRECT),
                key = "key1")
)

3,最核心的我覺得是它的配置檔案了,因為我們傳輸的是是實體物件.所以牽涉到資料的轉換了.

資料轉化我用的是Jackson2JsonMessageConverter,比較友好.

認證: @Qualifier(value = "classMapper") ClassMapper classMapper


傳輸:Jackson2JsonMessageConverter messageConverter = new Jackson2JsonMessageConverter();


需要把認證set進去,messageConverter.setClassMapper(classMapper);

其中,classMapper 這個bean裡面使用的是DefaultClassMapper,它裡面有放著一個map.

特別需要注意的是:Jackson2JsonMessageConverter,JsonMessageConverter 等都是比較常用的轉化器,但是他們也是有侷限性的,

不過使用 它們時有一個小問題,在不對它進行任何改造的前提下 ,傳送訊息的類和接受訊息的類必須是一樣的,不僅是要裡面的欄位一樣,類名一樣,連類的包路徑都要一樣。

4,
交換機:_Exchange 用於轉發訊息,但是它不會做儲存_ ,如果沒有 Queue bind 到 Exchange 的話,它會直接丟棄掉 Producer 傳送過來的訊息。常用交換機又分為3種類型:Direct Exchange,Topic Exchange,Fanout Exchange。

繫結:也就是交換機需要和佇列相繫結,這其中如上圖所示,是多對多的關係.

虛擬主機:一個虛擬主機持有一組交換機、佇列和繫結。為什麼需要多個虛擬主機呢?很簡單,_RabbitMQ當中,使用者只能在虛擬主機的粒度進行許可權控制

相關推薦

關於urho3d載入資源用法在Lua一些注意 android

起因: 載入場景的做法是Lua函式匯出中使用的是File的形式,在android上無法取到正確的位置,但是cache:GetResource可以獲取到XMLFile所以需要進行修改 這裡修改的檔案 Node.pkg, Scene.pkg Node.h No

Springboot Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意

Springboot 中 Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意點 1、有如下程式碼 // get 方法呼叫了 stockGive 方法,stockGive 方法使用了快取 // 但是每次執行get 方

RabbitMQ在SpringBoot使用的一些注意

在使用SpringBoot中,筆者使用到了RabbitMQ,其中踩了不少地雷,經過些許的刻版終於把它調通了, 筆者主要說的是從生產者生產資料併發送給消費者到後者接收並處理資料這麼一個全過程,我這裡的資料指的是實體物件.生產者和消費者是處在兩個不同的專案中的. 首先說明下整個

關於ActiveMQ一些注意和筆記

1.使用了連線池工廠的生產者 package com.imooc.jms; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import j

java split方法一些注意

今天用split方法分割一個類似”9580|9570|9571”的字串,用Arrays.asList將String[]轉成List,結果卻是這樣 [9,5,8,0,|,9,5,7,0,|,9,5,7,1] 列出幾個要點 首先java doc裡已經說明, s

WTForms做更新時的一些注意

因為做“新增”和“更新”操作時的內容都是類似的,所以可以定義一個FlaskForm類然後在“新增”和“更新”模板中都使用該類進行渲染: MovieForm(FlaskForm): class MovieForm(FlaskForm): tag_list = Tag.query.al

Pycharm呼叫tensorflow的一些注意

其實,Pycharm功能非常強大,使用起來非常的簡便,但遇到一些小問題,還是值得注意的. 現在有很多小夥伴在研究深度學習都會接觸到各種深度框架, tensorflow 算是比較常見的一種. 在使用Pycharm呼叫tensorflow的時候會報如下錯誤: ImportErro

mysqlexists注意

執行sql: select 1 from dual where exists (select 0); select 1 from dual where exists (select null); 執行結果都是1; mysql> create table t3(id int,t

Unity3D UGUI的一些注意

     網上找了很多資料, 都沒有詳細的講解四個座標系的一些細節。這裡我想記錄一下。 1. 初學者們常常會把GetComponent<RectTransform>().position 和 transform.position 當成是兩個東西,其實他們

open函式的一些注意及r,r+,w,w+,a,a+的區別

open函式的一些注意點 open(file[, mode[, buffering[, encoding[, errors[, newline]]]]]) (1)file檔案路徑及名稱,需要加引號如”/Users/macxunlei/Desktop/a.txt” (2)mode檔案開啟模式,r、w、a為開啟檔

SSH一些注意

struts和spring整合時,要新增一個struts-spring.jar   jdbc操作(Hibernate)時,需要新增mysql-connector-java-x.x.xx-bin.jar,然後Class.forName("com.mysql.jdbc.Driver")

MyBatis使用過程注意

1. 模糊查詢  在查詢時使用動態SQL,其中有一個需求是可以根據名字進行模糊匹配,我在對映檔案mapper是這麼寫的: <select id="list" resultMap="BaseResultMap"> select

python學習過程注意

input返回為str型資料,需要進行資料轉化python中縮排可以在文字編輯器中直接用Tab,Tab和空格混用會報錯list對應[],tuple對應(),dictionary對應{}。對於list,tuple和dictionary的索引用的都是[]python中字元和整型都是不可變的物件,呼叫不可變物件自身

keras-yolo3遇到的一些注意與解決思路

(keras-yolo3原始碼分析已經滿天飛,不重複解讀) 問題1:原始的yolo3原始碼,data_generator過程和模型train過程是阻塞式的,模型train速度會受到data產生的影響 解決思路:單獨開一個thread,將data_generator過程

小專案踩坑以及專案過程注意(第一篇)

批量整合後臺頁面 1、修改批量檔案的字尾名,下面將字尾.html改為.php 方法:開啟命令提示符,切換到我們要操作的目錄,用ren *.html *.php   就可以將.html文件改成.php文件 2、sublime中ctrl+shift+F可以對文件中的內

微信小程式開發注意

一、<view> 標籤與 <block> 標籤的區別 <view> 是一個元件,會在頁面上做渲染 <block>不是一個元件,它僅僅是一個包裝元素,只接受控制屬性,不會在頁面中做任何渲染 如下栗子,wx:else 是一個

iPad橫豎屏切換注意

最近公司要搞iPad的豎屏版本,使用了PrimaryOverlay的方式顯示左側的選單欄,在實際開發過程中很是遇到了一些問題,這裡就記錄一下吧:裝置方向不等於實際方向部分豎屏頁面無法旋轉到橫屏Popover出現覆蓋問題關於這幾個問題,其實也並沒有特別的麻煩,只是一時間會想不到解決思路而

【C++】一些注意

做個小筆記,pat時注意 1.map、set的自動排序如何解決 使用 unordered_map,unordered_set,則無序 過載排序,修改排序的函式 bool operator < (const node &a)const{ return

叢集搭建通用過程及一些注意

叢集搭建通用過程及一些注意點 0.設定靜態ip(vim /etc/sysconfig/network-scripts/ifcfg-eth0 中配置靜態ip),ip不變有利於後面的操作,但其實變了也只需要修改hosts檔案即可,這就是用計算機名的好處。 關於修改網路,當虛擬機器是克隆的

eval解析JSON注意

在JS中將JSON的字串解析成JSON資料格式,一般有兩種方式: 1.一種為使用eval()函式。 2. 使用Function物件來進行返回解析。 使用eval函式來解析,並且使用jquery的each方法來遍歷 用jquery解析JSON資料的方法,作為jquery非同步請求的傳輸物件,jquery請求後