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

How to deal with application crashes with RabbitMQ

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

我的问题陈述

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

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

我想到的解决方案:

  1. 使用批处理功能 - 但 AsyncRabbitTemplate 不支持它,所以我不能使用它。

  2. 正在使用数据库。但这绝对很麻烦。我也不会用这个。

如果可以识别重复项,则可以在消费者端使用 Idempotent Receiver 企业集成模式。

Spring 整合 has an implementation.

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

还不清楚批处理如何提供帮助,因为崩溃可能会在处理完一半批处理后发生在消费者端。

无论哪种情况,您都需要跟踪坠机前到达的位置。