Rabbitmq spring xd,兔子errorQueue作为errorChannel

Rabbitmq spring xd,兔子errorQueue作为errorChannel,rabbitmq,spring-xd,Rabbitmq,Spring Xd,我在SpringXD中定义了流。我的流看起来像这样,传输是rabbitMQ stream source|transformer1|transformer2|transformer3|sink 我已经部署了自定义转换器。我想将转换器/自定义模块中发生的所有异常/错误写入一个errorQueue 然后我想将errorQueue中的消息拉到mongoSink 我可以通过创建从rabbiterror队列到mongo的tap来实现这一点 `tap -->rabbit_ERROR_QUEUE--&g

我在SpringXD中定义了流。我的流看起来像这样,传输是rabbitMQ

stream source|transformer1|transformer2|transformer3|sink
我已经部署了自定义转换器。我想将转换器/自定义模块中发生的所有异常/错误写入一个errorQueue 然后我想将errorQueue中的消息拉到mongoSink

我可以通过创建从rabbiterror队列到mongo的tap来实现这一点

`tap -->rabbit_ERROR_QUEUE-->mongoSink`

有什么方法可以配置我的spring xd自定义模块xml,使其在默认情况下将所有异常和错误写入错误队列?

如果将
autoBindDLQ
设置为true(在
servers.yml
中,或在流级别的部署属性中),xd将为您创建死信队列

您还需要配置重试

默认情况下,总线将尝试传递消息3次,然后拒绝消息,代理将其转发到死信队列

另一个总线/部署属性
republishToDLQ
为总线提供了将消息重新发布到DLQ(而不是拒绝消息)的机制。这将在错误消息(异常等)中包含附加信息作为标题

有关这些属性的完整信息,请参阅参考手册的第页

但是,您不会使用tap从DLQ消费,而是

stream create errorStream --definition "rabbit ..."

i、 e.使用
rabbit
源从DLQ中提取。

我已将DLQ配置为ttl,用于重试错误,我已在您的帮助下创建了一个循环,以便重试错误并返回流。但是,我希望将系统故障写入不同的错误通道,该通道可能是用户定义的rabbit队列。您将需要更复杂的环境使用DLQ TTL路由到第三个队列;创建一个要从中使用的流,并检查
x-death
头以决定是路由回原始队列还是放弃并写入第四个队列;从中消费,然后写信给mongo。