Spring batch 使用RabbitMq消息的Spring批处理集成

Spring batch 使用RabbitMq消息的Spring批处理集成,spring-batch,spring-integration,spring-integration-amqp,Spring Batch,Spring Integration,Spring Integration Amqp,我目前正在使用IntegrationFlow在RabbitMq消息到达队列时触发作业执行。IntegrationFlow的AmqpInboundChannelAdapter和作业的第一步的ItemReader都配置为从同一队列读取消息 我遇到的问题是IntegrationFlow的AmqpInboundChannelAdapter读取RabbitMQ消息,然后ItemReader再也找不到该消息。可能是因为IntegrationFlow在作业启动之前确认了该消息 有没有办法防止Integrati

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

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

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

这个问题在某种程度上描述了我的问题,除了我不做任何处理之外,我只是尝试使用IntegrationFlow作为作业启动触发器。因此,解决方案似乎是一种反模式


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


如果第一条消息是触发器,并且条目读取器随后读取多条消息,则可以将消息内容添加到
作业参数中。您还需要将适配器的预回迁设置为1,以便在处理此消息时不会发送任何其他消息。

我采用第一种方法解决了这个问题,使用相同的路由密钥创建了第二个队列。谢谢你的建议!