簡體   English   中英

如何使用Spring Integration輪詢AMQP隊列

[英]How to poll an AMQP queue using Spring Integration

我有一個用例,我需要等待2個小時才能使用AMQP(我們使用Rabbit)隊列中的消息。

編輯:為了澄清我的用例...我需要每條單獨的消息要等待2個小時才能被讀取。 例如,消息1在10am到達,消息2在10:15到達。 我需要以12p讀取消息1和以12:15p讀取消息2。

我們正在使用Spring Integration3.x。

int-amqp:inbound-channel-adapter是消息驅動的,根據我的發現沒有輪詢選項。

我想到的幾件事:

有什么建議么?

我們目前沒有輪詢入站適配器。 #1很容易。 對於#2,最簡單的方法是使用RabbitTemplate並從POJO中的inbound-channel-adapter調用receive()

我會選擇#1; 您不需要石英,可以使用簡單的Spring計划任務和控制總線來啟動適配器。

另一個技巧是使用PollableAmqpChannel

<int-amqp:channel id="myQueueName" message-driven="false"/>

並為該頻道的訂戶提供<poller>

沒有理由將消息發送到該通道(因為你會從輪詢隊列兔消息)和正確的,它看起來像anti-pattern ,但它是一個鈎子如何避免與直接的任何變通辦法RabbitTemplate通過規划環境地政司使用。

更新

<delayer>可以幫助您,但這取決於您的要求。 如果您不想輪詢RabbitMQ的消息,則應使用上面的解決方法。 但是,如果您只是不想在一段時間后才處理消息,則可以在該時間內“延遲”消息。

不要忘記添加持久性message-store以避免在此期間丟失消息以及意外的應用程序故障。

僅供參考,我如何解決此問題。 (使用的解決方案3)。

<rabbit:queue name="delayQueue" durable="true">
  <rabbit:queue-arguments>
    <entry key="x-message-ttl">
       <value type="java.lang.Long">7200000</
     </entry>
     <entry key="x-dead-letter-exchange" value="finalDestinationTopic"/>
     <entry key="x-dead-letter-routing-key" value="finalDestinationQueue"/>
  </rabbit:queue-arguments>
</rabbit:queue>

<rabbit:topic-exchange name="finalDestinationTopic">
  <rabbit:bindings>
    <rabbit:binding queue="finalDestinationQueue" pattern="finalDestinationQueue"/>
  </rabbit:bindings>
</rabbit:topic-exchange>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM