4

我有一个正在编写的应用程序,它需要在后台执行长时间的计算,所以我基本上有以下工作流程:

  1. 客户端将作业提交到边缘“调度程序”服务器。
  2. Dispatcher 服务器将作业提交到消息队列。
  3. 计算服务器拉取作业并开始工作。

计算服务器还提供工作状态的实时反馈,以便客户端可以看到进度。

我现在遇到的主要问题是弄清楚如何为队列中提交的消息获取唯一的作业 ID,并且还要弄清楚哪个服务器为消息提供服务。一旦最初提交作业(第 1 步),客户端应该会收到一个标识作业的唯一令牌。然后,客户端应该能够定期轮询调度程序服务器以检查令牌的状态是否已启动。

在计算服务器为请求提供服务后,客户端应在轮询调用中获取编码器服务器的 DNS 地址或 IP 地址。

我怎样才能做到这一点?消息队列是否为队列中的每条消息提供了唯一标识令牌的概念?

4

2 回答 2

13

事实证明,RabbitMQ实际上确实为消息提供了唯一的 id,这在 RPC 应用程序中尤其有用,这是我正在寻找的那种应用程序。每条消息都有一个correlationId唯一标识它的信息,并且可以提供一个callback信息,以便在作业完成时或实际上在任何时候通知原始服务器。

于 2012-07-12T22:50:49.920 回答
0

您可以使用java.util.UUID类生成通用唯一标识符。

示例代码:

UUID uuid = UUID.randomUUID();
System.out.println("UUID: " + uuid.toString());

样本输出:UUID: d5a43450-2321-40ac-9746-9cf5d7447aca

对于消息队列部分,为了避免重新发明轮子,我建议您首先检查基于 JMS 的解决方案。有很多选择

于 2012-07-12T20:31:55.063 回答