0

每当调用我的 REST API 的给定端点时,我都需要处理一项耗时且容易出错的任务(例如,调用将触发 SMS 传递的 SOAP 端点),但我不想让我的用户在发回响应之前等待。Spring AMQP 已经是我的堆栈的一部分,所以我想利用它来建立一个“工作队列”并让许多工作进程从队列中消耗并处理“工作单元”。但是,我有以下要求:

  1. 保证一个工作单元被交付,并且交付给一个工人。
  2. 一个工作单元是否因任何原因未能完成,它必须被放回队列中,以便其他工作人员稍后可以拿起它。
  3. 工作单元在服务器重启和崩溃后仍然存在。这是强制性的,因为我不会使用任何类型的数据库来存储它们。

我知道 RabbitMQ 和 Spring AMQP 可以以确保这三个要求的方式进行配置,但我只用它来实现 RPC,所以我对除此之外的任何东西都不太了解。有什么我可以效仿的例子吗?有哪些需要注意的陷阱?

4

1 回答 1

0

在创建队列时,rabbitmq 为您提供了两个选项;短暂的或持久的。在您确认它们之前,持久消息将可用。如果您不给队列一个 ttl,消息将不会过期。对于初学者,您可以启用 rabbitmq 管理插件并玩一下。

但是如果你真的想保证你的消息的安全性以防止硬重置或硬件问题,我想你需要使用 rabbitmq 集群。

Rabbitmq Clustering,您可以在页面右侧找到高可用性主题。

这家伙解释了如何集群

顺便说一句,我也喜欢豆茎。您可以让它将消息写入磁盘,它们将是安全的,除非磁盘故障。

于 2015-03-29T22:20:44.280 回答