RabbitMQ架构用于返回结果的作业

时间:2016-02-09 19:24:23

标签: rabbitmq

我试图创建一个人们可以提交文件进行签名的系统。每次提交都可以有多个文件,如果每次提交中的所有文件都完成,结果将被发送回用户。

目前我有6个签名框,一次签署一个文件。因此,对于每个提交,我需要分离所有文件并在6个签名框之间对它们进行负载平衡,然后我需要获取结果并跟踪此提交中的所有文件是否都已完成。

如果可能的话,我还想限制每个提交可以使用的最大签名框数,以便大提交不会使其他工作挨饿。

我目前的设置是我有一个提交队列,一些提交队列消费者会逐一消耗它的消息,将提交分解为单个文件并将它们发送到文件队列。而6个签名框将是文件队列的6个消费者。我在向提交消费者写回结果时遇到问题,该消费者跟踪是否为此提交完成了所有文件,我也无法控制每个作业使用的最大签名框数。

我查看了rabbitmq的RPC设置,它允许回写结果。问题是rpc调用阻塞了每个文件,我希望同一提交的多个文件能够并行登录。因此,我需要针对此类场景的rabbitmq架构和消息流提出一些建议。

1 个答案:

答案 0 :(得分:0)

1)假设您知道文件数量,请为每个提交分配一个作业ID

2)工作可以由多个任务组成。

3)计算优先级,该优先级可以是文档no的反转。因此,默认情况下包含更多文档的文档的优先级较低。您的应用程序应该有花哨的功能来调整优先级,以防万一需要以更高的优先级处理更大的工作。

4)为什么不使用基于事件的机制来发送有关签名成功和失败的事件或当前正在处理每个任务的事件,而不是耦合作业提交者和签名者。

提交者将保留作业和​​任务详细信息,签名者将在处理时更新它们。在提交任何进一步的任务之前,提交者将考虑当前正在执行的任务的优先级和否。拨打电话的逻辑留给你。