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