如何使用RabbitMQ处理应用程序崩溃

如何使用RabbitMQ处理应用程序崩溃,rabbitmq,jms,spring-amqp,spring-rabbit,Rabbitmq,Jms,Spring Amqp,Spring Rabbit,最近,我为几个用例实现了RabbitMQ。发送邮件是其中之一(这在实践中很常见) 我的问题陈述: 一个web服务(比如说服务A)需要在队列中发布1000条消息(由一些邮件发送引擎选择)。但不幸的是,在向队列发布500条消息后,我的应用程序崩溃了 现在,如果我再次点击相同的服务,那么在第一次点击时已经推送的500条消息将再次被推送。虽然邮件复制目前不是什么大问题,但绝对不是我们想要的。如何处理这个问题。有什么想法吗 我提出的解决方案: 使用批处理功能-但是AsyncRabbitTemplate不支

最近,我为几个用例实现了RabbitMQ。发送邮件是其中之一(这在实践中很常见)

我的问题陈述

一个web服务(比如说服务A)需要在队列中发布1000条消息(由一些邮件发送引擎选择)。但不幸的是,在向队列发布500条消息后,我的应用程序崩溃了

现在,如果我再次点击相同的服务,那么在第一次点击时已经推送的500条消息将再次被推送。虽然邮件复制目前不是什么大问题,但绝对不是我们想要的。如何处理这个问题。有什么想法吗

我提出的解决方案:

  • 使用批处理功能-但是AsyncRabbitTemplate不支持它,所以我不能使用它

  • 使用数据库。但那肯定很麻烦。我也不会用这个


  • 如果可以识别重复项,那么可以在消费者端使用企业集成模式

    Spring集成

    但是,不清楚为什么要使用异步模板,因为异步模板用于发送和接收操作。这个应用程序听起来只需要发送请求,而不是等待回复

    目前还不清楚批处理有何帮助,因为在处理了一半批处理后,崩溃可能会发生在用户端


    在这两种情况下,您都需要跟踪崩溃前的情况。

    是的,我可以用rabbit模板替换异步模板来发送邮件。我只是想用它,如果我需要任何成功或失败的回调。我的发送方和接收方在同一个应用程序中,因此如果我批量发布1000条消息,其中500条消息被消费,那么它们将立即从队列中删除。假设应用程序重新启动。所以现在,只有剩下的500人会被从队列中挑选出来。如果我错了,请更正。您仍然可以使用标准模板获得async publisher确认/返回。否,如果消费者在第一批中失败,则消息将重新发出-只要您使用默认的确认模式(自动)。如果ack模式为NONE,则会丢失消息。但是,当重新发送邮件时,您仍然需要处理已经发送的重复电子邮件。谢谢您的帮助。我将使用这个用例的标准模板。如果邮件重复造成了严重的问题,我希望不会出现这种情况,那么我将进一步研究幂等接收者。您是否尝试在一个事务中提交邮件?