2013-07-16 33 views
1

jmstemplate receive()方法是如何同步的?發件人將消息發送給代理,另一方消費者從代理隊列或主題消費消息。對於接收,它將是一些輪詢線程在等待代理中的一些數據。如何保持同步?JmsTemplate同步接收

+0

當receive()阻塞等待消息時,它是否繼續輪詢隊列,還是每個阻塞只計數一次輪詢? – Muzammil

回答

3

JmsTemplate使用幕後的JMS API,特別是MessageConsumer。該服務可以嘗試在不等待(receiveNoWait)的情況下嘗試接收Message,或者可以等待可配置的時間量(receive(long timeout))。當它以0的超時被調用時,接收方法阻塞,直到消息到達。 JmsTemplate沒有處理所有這些(即它由客戶端代理實現提供)。

接收消息的更常規方式是使用偵聽器容器。在Spring中,DefaultMessageListenerContainer允許您使用線程輪詢來處理傳入的消息。檢查jms documentation of the Spring framework獲取更多信息。