Spring integration spring集成amqp拒绝消息(如果未处理)
我需要解决这个问题。我有两个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()) )
@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。然后,如果队列已满,则在超时后添加消息的尝试将失败。但是,在这种情况下使用队列通道是危险的——如果服务器出现故障,您可能会丢失消息,因为消息一经放入队列就会被确认 如果改用
集合频道
,生产者将阻止等待消费者接收消息
但请记住,如果服务器在切换后崩溃,即使这一条消息也可能丢失。好的,谢谢,我必须改变方式,因为这是错误的方式。:)更好的做法是,对于每种类型的消息,不要有超过一个消费者。所以我将消息分为不同的类型,并使用路由键对它们进行路由。无论如何,谢谢你的帮助。