每当调用我的 REST API 的给定端点时,我都需要处理一项耗时且容易出错的任务(例如,调用将触发 SMS 传递的 SOAP 端点),但我不想让我的用户在发回响应之前等待。Spring AMQP 已经是我的堆栈的一部分,所以我想利用它来建立一个“工作队列”并让许多工作进程从队列中消耗并处理“工作单元”。但是,我有以下要求:
- 保证一个工作单元被交付,并且交付给一个工人。
- 一个工作单元是否因任何原因未能完成,它必须被放回队列中,以便其他工作人员稍后可以拿起它。
- 工作单元在服务器重启和崩溃后仍然存在。这是强制性的,因为我不会使用任何类型的数据库来存储它们。
我知道 RabbitMQ 和 Spring AMQP 可以以确保这三个要求的方式进行配置,但我只用它来实现 RPC,所以我对除此之外的任何东西都不太了解。有什么我可以效仿的例子吗?有哪些需要注意的陷阱?