2015-01-12 1 views
0

SimpleMessageListenerContainer를 사용하여 rabbitmq 메시지를받는 방법을 배우고 있습니다. 내 리스너 컨테이너에는 prefetchCount = 1000이 있습니다. 그러나 리스너 워커는 한 번에 하나의 메시지 만 수신하는 MessageListener 인터페이스를 구현합니다. 메시지 목록을받을 수있는 인터페이스가 있습니까? 그렇지 않은 경우 메시지 목록을 수신하려면 어떻게해야합니까? 한 번에 하나의 메시지를 처리하는 대신 한 번에 목록을 처리하여 일괄 삽입/업데이트를 처리 할 수 ​​있습니다. 나는 또한 나에게 전달 된 모든 메시지에 대해 한 번 인정하고 싶다.봄 프레임 워크를 사용하여 모든 prefetch rabbitmq 메시지를받는 방법?

감사합니다,

숀 구엔

답변

0

그런 API가 없습니다; 낮은 수준의 토끼 클라이언트 고객도 각 프리 페치 메시지를 한 번에 하나씩 전달합니다 (handleDelivery 통해).

직접 목록에 누적해야합니다.

1000 전송 후 단일 확인을 보내려면 txSize 속성을 사용합니다 (프리 페치와 동일하게 설정).

+0

nth == 1000이면 수신 한 n 번째 메시지를 알 수있는 방법이 있습니까? –

+0

'txSize = 1000'을 사용하면 컨테이너는 1000 후에 응답합니다. 만약 당신이 용기를 내고 싶다면,'ChannelAwareMessageListener'를 사용하고, 확인 모드를'MANUAL' (디폴트'AUTO' 대신)으로 설정하고 채널에서'basicAck'을 발행하십시오. ('message.gertMessageProperties()에서 deliveryTag를 사용하십시오. .getDeliveryTag()'). –

+0

@Gary : 나는 비슷한 상황에 처해있다. 그것은 관습에 어긋나는 사용이지만, 청취자는 N (예를 들어 10) 개의 메시지 (json) 본문에 합격하면 문자열이 잘 전달되는 제 3 자 서비스를 호출합니다. txSize를 사용하여 제안하고 목록에 누적하십시오. 하지만 어떻게해야할지 모르겠습니다. 나는 자동 컨테이너 ack를 사용할 수있다. 내가 사용해야하는 청취자는 무엇인가? "@Bean을 사용 중입니다. public MessageListener messageListener() { return new MessageListener() { public void onMessage (Message message) {....}" – user3741611