我有一个连接 JMS 侦听器的 spring 集成代码(侦听 mq 系列本地队列)
<int-jms:message-driven-channel-adapter>
并通过一个将消息转发给rabbitmq(不受我控制)
<int-amqp:outbound-channel-adapter>
我试图保持这种事务性意味着如果 rabbitmq 没有收到消息,我想将其保留在 MQ 系列本地队列中。但是我注意到,如果 rabbitmq 配置中提到的交换不存在,我会在日志中看到这一行:
ERROR (CachingConnectionFactory.java:292) - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'xxx' in vhost 'xxx', class-id=60, method-id=40)
但是对于 mq 系列本地队列,我的消息消失了。
如果rabbitmq代理失败或交换不存在,我该怎么做才能重试发送消息?
感谢您的帮助,我的配置:
<int-jms:message-driven-channel-adapter
id="x.y.z" channel="channel-in"
error-channel="errorChannel" header-mapper="jmsIntegrationHeaderMapper"
acknowledge="transacted" destination-name="a.b.c" />
<int:channel id="channel-in">
</int:channel>
<int:header-enricher input-channel="channel-in"
output-channel="channel-out">
<int:header name="url"
expression="'amqp://${amqp.user}@${amqp.host}:${amqp.port}/${amqp.vhost}'"></int:header>
</int:header-enricher>
<int:channel id="channel-out">
</int:channel>
<int-amqp:outbound-channel-adapter
channel="channel-out" amqp-template="amqpTemplate"
routing-key="crd" mapped-request-headers="*" exchange-name="${amqp.exchange}">
</int-amqp:outbound-channel-adapter>
<rabbit:connection-factory id="amqpConnectionFactory" addresses="${amqp.host}:${amqp.port}"
cache-mode="CONNECTION"
channel-cache-size="25"
username="${amqp.user}"
password="${amqp.pass}"
virtual-host="${amqp.vhost}"/>
<rabbit:template id="amqpTemplate"
connection-factory="amqpConnectionFactory" mandatory="true" channel-transacted="true"/>