2014-06-07 2 views
0

AMQP (우리는 토끼 사용) 대기열에서 메시지를 소비하기 전에 2 시간을 기다려야한다는 유스 케이스가 있습니다.스프링 통합을 사용하여 AMQP 대기열을 폴링하는 방법

편집 : 내 사용 사례를 명확히하기 위해 ... 각 개별 메시지를 읽기 전에 2 시간 기다려야합니다. 예 : 메시지 1은 오전 10시에 도착하고 메시지 2는 오후 10:15에 도착합니다. 12p에서 읽히는 메시지 1과 12:15p에서 읽히는 메시지 2가 필요합니다.

우리는 Spring Integration 3.x를 사용하고 있습니다.

int-amqp:inbound-channel-adapter은 메시지 기반이며 찾을 수있는 폴링 옵션이 없습니다.

내가 생각 한 몇 가지

:

어떤 제안이 있습니까?

답변

0

FYI, 어떻게 문제를 해결 했습니까? (사용 용액 # 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> 
1

현재 폴링 인바운드 어댑터가 없습니다. # 1은 쉽습니다. # 2의 경우 가장 간단한 방법은 RabbitTemplate을 사용하고 POJO의 inbound-channel-adapter에있는 을 호출하는 것입니다.

나는 # 1과 함께 갈 것이다. 당신은 석영이 필요 없으며 간단한 봄 스케줄 작업과 제어 버스를 사용하여 어댑터를 시작할 수 있습니다.

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

을하고 그 채널에 가입자의 <poller>을 제공

+0

감사합니다.주말 다시 생각한 후, 어느 솔루션이 내 문제를 해결할 지 확신하지 못합니다. 유스 케이스를 잘 설명하지 않았다. 각 개별 메시지를 2 시간 정도 기다려야합니다. 옵션 3 또는 새로 추가 된 옵션 4 내 질문에 최고의 솔루션이 될 수 있습니다. –

+1

해당 유스 케이스 (모든 메시지가 2 시간 지연됨)의 경우 옵션 3이가는 길입니다. 나는 지연자를 소개하지 않을 것이다. –

1

또 다른 트릭은 PollableAmqpChannel을 사용하는 것입니다.

바로, 그것은 anti-pattern처럼 보이는, (당신이 토끼 큐에서 메시지를 폴링 때문에) 그 채널에 메시지를 보낼 이유가 없다, 그러나 SpEL을 통해 직접 RabbitTemplate 사용과 대안을 방지하는 방법 훅입니다.

UPDATE 것은

<delayer> 당신을 도울 수 있지만, 그것은 당신의 요구 사항 달려 있습니다. RabbitMQ에서 메시지를 폴링하지 않으려면 위의 해결 방법을 사용해야합니다. 그러나 약간의 시간이 경과 될 때까지 프로세스 메시지를 원하지 않는다면, 그 시간 동안 '지연'시킬 수 있습니다.

해당 기간 동안의 메시지 손실 및 예기치 않은 응용 프로그램 오류를 방지하려면 영구적 인 message-store을 추가하는 것을 잊지 마십시오.

+0

감사합니다. 그 좋은 해결 방법입니다. 이제 한 가지 문제는 ... 단 한 개의 메시지로 2 시간마다 폴링하면 대기열이 실제로 백업 될 수 있기 때문에 pollable 채널이 저에게 효과가 있을지 확신 할 수 없습니다. 내 유스 케이스를 명확히하기 위해 내 질문이 업데이트되었습니다. –

+0

문제에 대한 덧글 추가 –

관련 문제