Spring integration spring集成amqp拒绝消息(如果未处理)

Spring integration spring集成amqp拒绝消息(如果未处理),spring-integration,amqp,Spring Integration,Amqp,我需要解决这个问题。我有两个amqp消费者集来获取一条消息 @Bean public IntegrationFlow jmsPrimaryFlow() { return IntegrationFlows.from( Amqp.inboundGateway( taskManager().getPrimaryMessageListenerContainer()).errorChannel(errorChannel()) )

我需要解决这个问题。我有两个amqp消费者集来获取一条消息

@Bean
public IntegrationFlow jmsPrimaryFlow() {
    return IntegrationFlows.from(
        Amqp.inboundGateway(
            taskManager().getPrimaryMessageListenerContainer()).errorChannel(errorChannel())
        )
        .channel(taskChannel())
        .get();
}

@Bean
public IntegrationFlow jmsSecondaryFlow() {
    return IntegrationFlows.from(
        Amqp.inboundGateway(
            taskManager().getSecondaryMessageListenerContainer()).errorChannel(errorChannel())
            .autoStartup(false)
        )
        .channel(taskChannel())
        .get();
}
taskChannel是queuechannel,但一次只允许使用一条消息,因此没有并行处理。 如果另一条消息花了太长时间无法继续,我如何在超时后拒绝一条消息。
那么这个消息将返回到队列中,由另一个节点继续?我的意思是,这两个消费者预取了两条消息,但一次只能处理一条消息,所以如果第一条消息需要很长时间才能处理,那么如何释放第二条预取消息呢

你的问题不清楚。您可以在队列通道上设置容量限制(例如1),并在网关上设置sendTimeout。然后,如果队列已满,则在超时后添加消息的尝试将失败。但是,在这种情况下使用队列通道是危险的——如果服务器出现故障,您可能会丢失消息,因为消息一经放入队列就会被确认

如果改用
集合频道
,生产者将阻止等待消费者接收消息


但请记住,如果服务器在切换后崩溃,即使这一条消息也可能丢失。

好的,谢谢,我必须改变方式,因为这是错误的方式。:)更好的做法是,对于每种类型的消息,不要有超过一个消费者。所以我将消息分为不同的类型,并使用路由键对它们进行路由。无论如何,谢谢你的帮助。