【问题标题】:Unique ids for jobs in a message queue?消息队列中作业的唯一 ID?
【发布时间】:2012-07-12 16:06:19
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java message-queue rabbitmq


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      示例代码:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 2021-01-23
        • 1970-01-01
        • 2013-12-26
        相关资源
        最近更新 更多