나는 RabbitMQ와 함께 Spring을 사용하고 있으며 런타임 예외가 발생할 경우 메시지 재 전달을 피하려고합니다. requeue-reject
을 false
으로 설정하고 listener-container
으로 설정하고 을 던지는 사용자 지정 오류 처리기를 구성하려고했습니다. 두 가지 전략 모두 실패했고 메시지는 영원히 계속 재 배달됩니다. 이유에 대한 아이디어가 있습니까?RabbitMQ with Spring reelivering message forever
감사합니다. 모든 requeue-rejected="false"
및 AmqpRejectAndDontRequeueException
의
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.1.xsd">
<rabbit:connection-factory id="rabbitMQConnectionFactory" host="localhost" port="5672" username="guest" password="guest" />
<rabbit:admin connection-factory="rabbitMQConnectionFactory" />
<rabbit:template id="amqpTemplate" connection-factory="rabbitMQConnectionFactory" />
<rabbit:queue name="q1" />
<rabbit:queue name="q2" />
<rabbit:listener-container error-handler="errorHandler" connection-factory="rabbitMQConnectionFactory" concurrency="10" transaction-manager="transactionManager" requeue-rejected="false">
<rabbit:listener ref="q1Listener" method="consumeMessage" queue-names="q1" />
<rabbit:listener ref="q2Listener" method="consumeMessage" queue-names="q2" />
</rabbit:listener-container>
<bean id="errorHandler" class="ErrorHandler" />
<bean id="q1Listener" class="Q1MessageConsumerBean" />
<bean id="q2Listener" class="Q2MessageConsumerBean" />
</beans>
메시지를 대기열에서 제거하고 실패로 표시하려면 메시지를 "Nack"해야합니다. – jhilden
안녕하세요, 당신은 errorHandler 빈의 예제 코드를 줄 수 있습니까? – Adelin