「Spring」使用Spring和AMQP發送接收消息(下)
上篇講了使用RabbitMQ發送消息,本篇則來講接收消息。
在傳統JMS中有兩種從隊列獲取信息的方式,使用JmsTemplate的同步方式以及使用消息驅動pojo的非同步方式。Spring AMQP也提供了類似的方式來獲取通過AMQP發送的消息。
使用RabbitTemplate來接收消息
RabbitTemplate提供的接收信息的方法中最簡單的就是receive方法,通過該方法就可以從隊列中獲取一個Message對象:
Message message = rabbit.receive("spittle.test.queue");
或者也可以通過配置獲取消息的默認隊列,這是通過在配置模板的時候,設置queue屬性實現的:
這樣的話,在調用receive方法時,不需要設置任何參數就能從默認隊列中獲取消息:
Message message = rabbit.receive;
獲取到Message對象後,一般需要將它的body屬性中的位元組數組轉換為想要的對象,就像在發送的時候將領域對象轉換為Message一樣,將接收到的Message轉換為領域對象也很繁瑣。這裡可以考慮使用RabbitTemplate的receiveAndConvert方法作為替代方案:
Spittle spittle = (Spittle) rabbit.receiveAndConvert("spittle.test.queue");
receiveAndConvert方法會使用與sendAndConvert方法相同的消息轉換器,將Message對象轉換為原始的類型。
調用receive和receiveAndConvert方法都會立即返回,如果隊列中沒有等待的消息,將會得到null。這時一般需要程序員自己管理輪詢以及必要的線程,實現隊列監控。如果不想每次都同步輪詢等待消息到達,可以使用Spring AMQP提供的消息驅動pojo,下面就看看使用消息驅動pojo的方式來接收消息。
使用消息驅動pojo來接收消息
如果想要在消息驅動pojo中非同步地消費使用Spittle對象,先要解決這個pojo本身,如下的SpittleTestHandler扮演了這個角色:
public class SpittleTestHandler {
public void handleSpittleTest (Spittle spittle) {
...
}
}
其實這個類並沒有依賴於AMQP,不管通過什麼機制傳遞過來Spittle對象,它都能夠處理。
這裡還需要在Spring應用上下文中將SpittleTestHandler聲明為一個bean:
最後要聲明一個監聽器容器和監聽器,當消息到達的時候,能夠調用SpittleTestHandler,配置如下: 上面的
※Mina IoService介面定義及抽象實現
※vue-cli項目中怎麼mock數據
※Try My Best 儘力而為
※print2flash文檔在線預覽應用
※MPP 二、Greenplum數據載入
TAG:達人科技 |
※Facebook計劃讓Messenger,Instagram和WhatsApp用戶互相發送消息
※SpringBoot中發送QQ郵件
※Python模擬發送Slack消息
※Verizon發送推送通知給iPhone用戶建議升級到Galaxy S9
※Localhost環境下使用Django send_mail發送郵件-以QQ和163郵箱為例
※PHP 使用 phpmailer 發送電子郵件
※用戶現可用Opera的加密貨幣錢包發送CryptoKitties
※Facebook Messenger將容對發送的消息進行刪除
※Supreme? / RIMOWA 聯乘企劃突擊發送
※Facebook被指秘密刪除扎克伯格在Messenger上發送的消息
※Windows 10 Your Phone應用更新 現可查看和發送簡訊
※Google與T-Mobile達成協議,將用戶位置數據發送至急救中心
※php中curl同時發送多個請求curl_multi函數集的用法
※Linux Mint 19「Tara」最早5月上線:承諾不收集/發送隱私數據
※Coinbase向美國客戶發送IRS報稅表1099-K
※Android手機現可利用亞馬遜Alexa發送簡訊
※Triout:一個可以記錄通話,向攻擊者發送照片和簡訊的Android間諜軟體
※Servlet 發送電子郵件
※NASA準備將2個CubeSats微型衛星發送到火星
※Android端Gmail8.7版本新增一功能:可撤銷已發送電子郵件