1

我目前正在使用 IntegrationFlow 在 RabbitMq 消息到达队列时触发作业执行。IntegrationFlow 的 AmqpInboundChannelAdapter 和作业的第一步的 ItemReader 都配置为从同一个队列中读取消息。

我遇到的问题是 IntegrationFlow 的 AmqpInboundChannelAdapter 读取 RabbitMQ 消息,然后 ItemReader 无法再找到该消息。可能是因为 IntegrationFlow 在 Job 启动之前确认了消息。

有没有办法阻止 IntegrationFlow 消费/确认消息,将其留在队列中,以便 ItemReader 可以作为预期工作?我尝试配置 AmqpInboundChannelAdapter 以重新排队消息,但这只会导致适配器重新读取它自己的消息的无限循环。

这个问题在一定程度上描述了我的问题,除了我没有做任何处理,我只是试图将 IntegrationFlow 用作 JobLaunching 触发器。因此,该解决方案似乎是一种反模式。

Spring Batch Integration - 传递数据 b/w 集成和批处理

任何帮助将不胜感激

4

1 回答 1

1

如果批处理作业只需要来自那条消息的信息,我建议使用相同的路由键绑定第二个队列;一个队列用于触发器,一个队列用于项目阅读器。

如果第一条消息是触发器,然后项目阅读器读取多条消息,则可以将消息内容添加到JobParameters. 您还需要将适配器的预取设置为 1,以便在处理此消息时不会发送任何其他消息。

于 2020-12-11T14:39:15.600 回答