如何使用 RabbitMQ 处理应用程序崩溃
How to deal with application crashes with RabbitMQ
最近,我为几个用例实现了 RabbitMQ。发送邮件就是其中之一(在实践中很常见)
我的问题陈述:
Web 服务(比如服务 A)需要在队列中发布 1000 条消息(某些邮件发送引擎会选择这些消息)。但不幸的是,在向队列发布 500 条消息后,我的应用程序崩溃了。
现在,如果我再次点击相同的服务,那么第一次已经推送的 500 条消息将再次推送。虽然邮件重复目前不是什么大问题,但绝对不是我们想要的。这个要怎么处理。有什么想法吗?
我想到的解决方案:
使用批处理功能 - 但 AsyncRabbitTemplate 不支持它,所以我不能使用它。
正在使用数据库。但这绝对很麻烦。我也不会用这个。
如果可以识别重复项,则可以在消费者端使用 Idempotent Receiver 企业集成模式。
Spring 整合 has an implementation.
但是,不清楚您为什么要使用异步模板,因为它用于发送和接收操作。这个应用听起来好像只需要发送请求,而不是等待回复。
还不清楚批处理如何提供帮助,因为崩溃可能会在处理完一半批处理后发生在消费者端。
无论哪种情况,您都需要跟踪坠机前到达的位置。
最近,我为几个用例实现了 RabbitMQ。发送邮件就是其中之一(在实践中很常见)
我的问题陈述:
Web 服务(比如服务 A)需要在队列中发布 1000 条消息(某些邮件发送引擎会选择这些消息)。但不幸的是,在向队列发布 500 条消息后,我的应用程序崩溃了。
现在,如果我再次点击相同的服务,那么第一次已经推送的 500 条消息将再次推送。虽然邮件重复目前不是什么大问题,但绝对不是我们想要的。这个要怎么处理。有什么想法吗?
我想到的解决方案:
使用批处理功能 - 但 AsyncRabbitTemplate 不支持它,所以我不能使用它。
正在使用数据库。但这绝对很麻烦。我也不会用这个。
如果可以识别重复项,则可以在消费者端使用 Idempotent Receiver 企业集成模式。
Spring 整合 has an implementation.
但是,不清楚您为什么要使用异步模板,因为它用于发送和接收操作。这个应用听起来好像只需要发送请求,而不是等待回复。
还不清楚批处理如何提供帮助,因为崩溃可能会在处理完一半批处理后发生在消费者端。
无论哪种情况,您都需要跟踪坠机前到达的位置。