2017-12-13 3 views
0

ActiveMQ Artemis 또는 Spring JMS 클라이언트가 에러시 다른 메시지를 사용하지 않도록 설정하는 방법은 무엇입니까?Artemis : 오류 발생시 메시지 소비를 중단하는 방법?

<addresses> 
    <address name="SimplePointToPoint"> 
     <anycast> 
      <queue name="SimplePointToPoint"/> 
     </anycast> 
    </address> 
</addresses> 
<address-settings> 
    <address-setting match="SimplePointToPoint"> 
     <max-delivery-attempts>-1</max-delivery-attempts> 
    </address-setting> 
</address-settings> 

이 내 소비자의 코드입니다 : 다음과 같이

내가 내 브로커를 구성한 나는 소비자가 message1을 처리 할

@JmsListener(destination = "SimplePointToPoint") 
public void consumeMessage(Message<String> message) { 
    if (message.getPayload().contains("error")) 
     throw new RuntimeException(); 

    log.info("received message: {}", message.getPayload()); 
} 

message1, message2 with errormessage3를 보내고 영원히 다시 시도하십시오 message2 with error. message3message2 with error이 성공적으로 소비 될 때까지 처리하지 않아야합니다. 실제로 일어나는 일은 재 시도간에 message3이 소비된다는 것입니다. 이 동작을 변경하는 방법? 어떤 아이디어?

답변

-1

기본적으로 ActiveMQ 프리 페치는 1000입니다.

the documentation을 참조하십시오.

ActiveMQConnectionFactory 또는 ActiveMQConnection에서 ActiveMQPrefetchPolicy의 인스턴스를 지정할 수 있습니다. 이렇게하면 모든 개별 프리 페치 값을 구성 할 수 있습니다. 각각의 서로 다른 서비스 품질은 다른 가치를 가지고 있기 때문입니다. 예 :

지속적 큐 (기본값 : 1000)

...

+0

당신의 대답은 아파치 ActiveMQ를 5.x를 적용되지만 문제는 아파치 ActiveMQ를 아르테미스 브로커에 대해이었다. –

관련 문제