搭建Spring RabbitMQ訊息服務時的一些注意事項
先貼上一份基於Java配置的RabbitMQ部分的程式碼:
@Bean
public ConnectionFactory rabbitConnectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
return connectionFactory;
}
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(rabbitConnectionFactory());
template.setMessageConverter(jsonMessageConverter());
return template;
}
@Bean
public MessageConverter jsonMessageConverter () {
return new JsonMessageConverter();
}
@Bean
TopicExchange paySuccessExchange() {
return new TopicExchange("pay-success-exchange");
}
@Bean
Queue queue() {
return new Queue("pay-success-queue", false);
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("pay-success");
}
@Bean
RabbitAdmin admin() {
RabbitAdmin admin = new RabbitAdmin(rabbitConnectionFactory());
admin.setIgnoreDeclarationExceptions(true); //這樣即使有關rabbitmq的bean初始化失敗整個web應用還能正常啟動
return admin;
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory rabbitConnectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory);
container.setQueueNames("pay-success-queue");
container.setMessageListener(listenerAdapter);
container.setMessageConverter(jsonMessageConverter());
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(PaySuccessReceiver receiver) {
MessageListenerAdapter m = new MessageListenerAdapter(receiver, "handleMessage");
m.setMessageConverter(jsonMessageConverter());
return m;
}
@Bean
public PaySuccessReceiver receiver() {
return new PaySuccessReceiver();
}
需要注意的是:
- 把RabbitAdmin設定成
admin.setIgnoreDeclarationExceptions(true);
,這樣的好處是即使配置出現了錯誤也不至於整個應用程式都啟動失敗的情況。預設情況下,當出現異常時, RabbitAdmin 會立即停止所有宣告的處理過程,這就有可能會導致一些問題- 如監聽器容器會初始化失敗,因另外的佇列沒有宣告,從而web應用啟動失敗。 - 最好顯式地設定
SimpleMessageListenerContainer
和RabbitTemplate
的MessageConverter
。如果沒有啟用配置的JsonMessageConverter
,那麼會出現這樣的錯誤:org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Failed to invoke target method 'handleMessage' with argument type = [class [B], value = [{[[email protected]}]
,這裡的
[B
還有class [B]
代表的是位元組陣列byte[]
的意思,也就是說,由於沒有啟用JsonMessageConverter
,所以傳送的POJO(在我的例子中是一個BaobiaoOrder訂單物件)被包裝成一個Message物件,所以此時在監聽器POJO的處理函式接收的引數實際是一個位元組陣列,需要手動地解析成需要的BaobiaoOrder物件。解決的方法就是顯式地給SimpleMessageListenerContainer
和RabbitTemplate
的MessageConverter
設定JsonMessageConverter
,這樣在handleMessage
函式的引數可以直接寫成BaobiaoOrder。 - 需要在訊息中傳送的POJO物件(BaobiaoOrder)必須有一個空的建構函式,否則會出現
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.iot.baobiao.pojo.BaobiaoOrder]: can not instantiate from JSON object (need to add/enable type information?)
這樣的錯誤。
相關推薦
搭建Spring RabbitMQ訊息服務時的一些注意事項
先貼上一份基於Java配置的RabbitMQ部分的程式碼: @Bean public ConnectionFactory rabbitConnectionFactory() { CachingConnectionFactory co
Spring Security 4.2.2 一些注意事項
1.配置檔案中的http標籤變為security:http2.security:http上的屬性use-expressions="false",如果未這麼宣告,那麼在子節點中security:intercept-url的access中直接使用角色名,則會報錯Field or
消費RabbitMQ時的注意事項,如何禁止大量的訊息湧到Consumer,保證執行緒安全
按照官網提供的訂閱型寫法( Retrieving Messages By Subscription ("push API")) 我發現,RabbitMQ伺服器會在短時間內傳送大量的訊息給Consumer,然後,如果你沒有來得及Ack的話,那麼服務端會積壓大量的UnAcked訊息,而Cons
消費RabbitMQ時的注意事項,如何禁止大量的訊息湧到Consumer
按照官網提供的訂閱型寫法( Retrieving Messages By Subscription ("push API")) 我發現,RabbitMQ伺服器會在短時間內傳送大量的訊息給Consumer,然後,如果你沒有來得及Ack的話,那麼服務端會積壓大量的UnAcked
darknet訓練yolov3時的一些注意事項
訓練需要用到的檔案: 1) .data檔案。該檔案包含一些配置資訊,具體為訓練的總類別數,訓練資料和驗證資料的路徑,類別名稱,模型存放路徑等。 例如coco.data classes= 80 # 訓練總類別數
SVN服務端的版本對比及建立倉庫時的注意事項
SVN是一個開放原始碼的版本控制系統,分為客戶端和服務端。就windows系統而言,客戶端通常使用 TortoiseSVN,下載地址:https://tortoisesvn.net/ ,而服務端通常分為 Subversion 和 VisualSVN Server 兩種,下面就服務端做簡要對比。
RabbitMQ訊息釋出時的權衡
在進行本篇文章的學習之前,你需要先閱讀https://www.cnblogs.com/duanjt/p/10057330.html。以便對Java訪問RabbitMQ的基礎用法有所瞭解。 一、失敗通知 基於前面的講解,如果訊息通過交換器傳送到指定的路由鍵,而這個路由鍵卻沒有被佇列繫結,那麼這條訊息就會被丟
學習shell指令碼時發現的一些注意事項
1.算術運算子一定要緊挨運算元; 2.賦值操作時,let 後面的整個要用引號包起來; 3.shift可以實現引數位置變數下移一位,具體就是$1=$2 ,$2=$3... $#遞減 ; 4.$*作為for迴圈列表時,加引號,即 “[email protected]”只迴圈一次並一次性
只需五分鐘-用Maven快速搭建Spring Cloud微服務
Maven安裝手冊 如果想學習Java工程化、高效能及分散式、深入淺出。微服務、Spring,MyBatis,Netty原始碼分析的朋友可以加我的Java高階交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型網際網路技術的視訊免費分享給大家。 1、準備安裝包 安裝包: apach
搭建Spring Cloud Eureka服務註冊中心(二)服務呼叫
上一節我們搭建了單節點的Eureka和一個provide-server的服務,這一次我們再新建立一個consume-server,然後使用RestTemplate實現服務之間的呼叫。 1、建立consume-server服務 服務建立過程就不一一描述了,這裡貼一下appl
spring rabbitmq 訊息確認機制和事務支援
確認並且保證訊息被送達,提供了兩種方式:釋出確認和事務。(兩者不可同時使用)在channel為事務時,不可引入確認模式;同樣channel為確認模式下,不可使用事務。 釋出確認: Confirms給客戶端一種輕量級的方式,能夠跟蹤哪些訊息被broker處理,哪些可能因為br
RabbitMQ 訊息服務二訊息重發以及需要回執的訊息的實現方式
為什麼要實現訊息重發?任何一個系統都不敢保證100%穩定,訊息重發是為了解決訊息服務中心故障恢復後,能夠讓失敗了的訊息能發出去,業務系統能夠儘可能的恢復資料。什麼是需要回執的訊息?MQ 不能保證業務方接受訊息處理後100%正確,回執就是在業務方處理完訊息後主動給訊息服務系統“
從零講解搭建一個NIO訊息服務端
本文首發於貓叔的部落格 | MySelf,如需轉載,請申明出處. 假設 假設你已經瞭解並實現過了一些OIO訊息服務端,並對非同步訊息服務端更有興趣,那麼本文或許能帶你更好的入門,並瞭解JDK部分原始碼的關係流程,正如題目所說,筆者將竟可能還原,以初學者能理解的角度,講訴並構建一個NIO訊息服務端
我們玩遊戲時需要去注意的一些注意事項
娛樂遊戲儼然成為了我們生活中的一部分,更像是一門必修課,在娛樂的同時,更豐富了我們的生活,無論走到哪裡,到了業餘時間都能看到幾個人圍在一起,打牌,搓麻將,下棋等等。棋牌累的遊戲各種玩法層出不窮,不分年齡,不分地域,想玩便可以玩,而且操作簡單,容易上手。那麼針對長期玩手機棋
linux下使用C獲取mp3 ID3資料時的一些注意事項(v1,v2.3,v2.4)
最近自己寫了一個獲取ID3資料的函式,剛開始也是在網上找了大量的資料,眾說紛紜,當時我也是被搞得有點暈了,所以現在結合他人的資料把我自己覺得應該注意的地方寫下來。以便以後檢視。 首先科普下mp3幀的知識: MP3檔案是由幀構成,幀是 MP3檔案的最小組成單位。根據幀性質的不
如何在spring boot 專案中加入freemarker,以及使用yaml語法時的注意事項
最近在做一個用郵件傳送報表的專案,要求在郵件正文中將excel表格顯示出來。我考慮到通過字串拼接表格太麻煩,而且不利於維護,所以使用freemarker做郵件模板來做展示。 專案環境:spring boot 構建工具:maven 步驟如下: 1.引入pom依賴
ATL建立COM服務時必須注意的問題
1:用ATL嚮導建立COM元件時,必須指定ProgID 2:ATL嚮導生成的RGS有BUG,必須手工新增一句 val AppID = s '%APPID%'像下面這樣 HKCR { ProgIDMyInterface.1 = s 'CMyInterface Class'
Android中用命令列檢視內嵌資料庫SQLite3的一些注意事項
進入手機模擬器的shell環境 連線好手機模擬器後,通過Android Studio的Teminal終端直接進入shell環境 adb shell //進入手機模擬器的shell環境 s
關於浮動的一些注意事項
關於浮動: 巨集觀地講,我們的web頁面和photoshop等設計軟體有本質的區別:web頁面的製作,是個“流”,必須從上而下,像“織毛衣”。而設計軟體,想往哪裡畫個東西,都能畫。 行內元素和塊級元素的區別:(非常重要) 行內元素: 與其他行內元素並排; 不能設定寬、高。預設的寬度,
搜尋引擎優化的一些注意事項
4、 評價網站實用性有哪些原則 網站速度 搜尋結果中的點選率 使用者停留時間、訪問時長 使用者跳出率 回頭客的數量 註冊使用者和非註冊使用者的比例 使用者訪問來源分佈 5、什麼是pr值 PR即PageRank,也就是網頁級別