消息队列中作业的唯一ID?

时间:2012-07-12 20:05:51

标签: java message-queue rabbitmq

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

  1. 客户端将作业提交给边缘“调度程序”服务器。
  2. Dispatcher服务器将作业提交到消息队列。
  3. 计算服务器拉取作业并开始工作。
  4. 计算服务器还提供有关工作状态的实时反馈,以便客户端可以观察进度。

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

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

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

2 个答案:

答案 0 :(得分:11)

事实证明,RabbitMQ does in fact give unique ids for messages在RPC应用程序中特别有用,这是我正在创建的那种应用程序。每条消息都有一个correlationId,它唯一地标识它,并且可以提供callback,通过该{{1}}通知原始服务器何时完成作业或者实际上在任何时刻。

答案 1 :(得分:1)

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

示例代码:

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

示例输出:UUID: d5a43450-2321-40ac-9746-9cf5d7447aca

对于消息队列部分,为避免重新发明轮子,我建议您先检查基于JMS的解决方案。有a lot of alternatives

相关问题