RabbitMQ Spring конфигурация мертвой буквы не работает

Ниже приведена конфигурация, которую я использую. Сообщения без ошибок, отлично работают от обмена до очереди с конверсией, которую прослушивает слушатель, это замечательно. То, что я хочу, чтобы произойти с ошибочными сообщениями, заключается в том, что когда я бросаю AmqpRejectAndDontRequeueException, "rabbitQueue" отправит сообщение на него мертвой буквой обмена и попадет в "rabbitErrorQueue". Однако нет никакой активности по обмену мертвой буквой или очереди. Может ли кто-нибудь увидеть, что я здесь делаю неправильно?

<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/rabbit
 http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans.xsd">
 <bean id="clientConnectionFactory">
 </bean>
 <rabbit:connection-factory id="rabbitConnectionFactory" connection-factory="clientConnectionFactory" host="${rabbit.broker.url}" port="${rabbit.broker.port}" username="${rabbit.username}" password="${rabbit.password}" publisher-confirms="true">
 <rabbit:admin connection-factory="rabbitConnectionFactory">
 <rabbit:template id="rabbitTemplate" connection-factory="rabbitConnectionFactory" exchange="${rabbit.exchange.name}" message-converter="messageConverter" queue="${rabbit.queue.name}">
 </rabbit:template>
 <rabbit:queue id="rabbitQueue" name="${rabbit.queue.name}">
 <rabbit:queue-arguments>
 <entry key="x-dead-letter-exchange" value="${rabbit.dead.letter.exchange.name}">
 <entry key="x-message-ttl" value="10000" value-type="java.lang.Long">
 </entry></entry></rabbit:queue-arguments>
 </rabbit:queue>
 <rabbit:queue id="rabbitErrorQueue" name="${rabbit.dead.letter.queue.name}">
 <rabbit:fanout-exchange id="fanoutExchange" name="${rabbit.exchange.name}">
 <rabbit:bindings>
 <rabbit:binding queue="rabbitQueue">
 </rabbit:binding></rabbit:bindings>
 </rabbit:fanout-exchange>
 <rabbit:direct-exchange id="directErrorExchange" name="${rabbit.dead.letter.exchange.name}">
 <rabbit:bindings>
 <rabbit:binding key="${rabbit.queue.name}" queue="rabbitErrorQueue">
 </rabbit:binding></rabbit:bindings>
 </rabbit:direct-exchange>
 <bean id="messageConverter">
 <bean id="rabbitMQExampleConsumer">
 <constructor-arg name="eventProcessor" ref="userEventProcessor">
 </constructor-arg></bean>
 <rabbit:listener-container connection-factory="rabbitConnectionFactory" message-converter="messageConverter">
 <rabbit:listener queues="${rabbit.queue.name}" ref="rabbitMQExampleConsumer" method="onMessage">
 </rabbit:listener></rabbit:listener-container>
</bean></rabbit:queue></rabbit:admin></rabbit:connection-factory></beans>
1 ответ

Попробуйте добавить явный x-dead-letter-routing-key - в противном случае используется тот же ключ, что и исходный маршрут, и нет ключа маршрутизации, необходимого для обмена разветвлением.

licensed under cc by-sa 3.0 with attribution.