Spring AMQP 源碼分析 06 - 手動消息確認
阿新 • • 發佈:2017-07-18
方法 message href sage str remes 分享 bit release
gordon.study.rabbitmq.springamqp.AsyncConsumerManualAck.java
MessageListener 接口,其 onMessage 回調方法包含 Channel 參數,可用於手動確認消息。
示例代碼第25行將 SimpleMessageListenerContainer 的消息確認模式設為 MANUAL,第28行實現 ChannelAwareMessageListener 接口,在 onMessage 回調函數中消費消息,並在第33行調用 basicAck 方法確認消息。
調用棧與前篇極為相似:
示例代碼創建了一用就會出錯的 ScornMessageConverter,將之設置給 SimpleMessageListenerContainer。從程序打印可見,ScornMessageConverter 從未被使用。
這也是顯而易見的,畢竟 onMessage 回調方法接受的參數是 Message 類型,根本不需要轉化。
### 準備
## 目標
了解 Spring AMQP 如何手動確認消息已成功消費## 前置知識
《Spring AMQP 源碼分析 04 - MessageListener》## 相關資源
Offical doc:<http://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#message-listener-adapter> Sample code:<https://github.com/gordonklg/study>,rabbitmq module 源碼版本:Spring AMQP 1.7.3.RELEASE## 測試代碼
### 分析
## 手動消息確認的實現
對於手動消息確認模式(AcknowledgeMode.MANUAL),Spring AMQP 選擇讓開發者在消息處理邏輯中自己調用 RabbitMQ java client 的 basicAck 方法確認消息。 MessageListener 接口無法滿足要求,因為 onMessage 回調方法無法獲取 Channel 對象。 Spring AMQP 提供了 ChannelAware## 消息轉化?
在使用 MessageListener 接口或 ChannelAwareMessageListener 接口時,框架沒有做過任何消息轉化。Spring AMQP 源碼分析 06 - 手動消息確認