我有一个API,客户端可以异步提交作业,可以轻松地将其分为许多较小的任务。有时我们收到的工作量超出了实时处理的能力,因此,我希望每个客户都有一个工作队列,以便在客户之间轮流处理工作。这样一来,如果一个客户提交了一份庞大的工作,则其他客户的微小工作就不必等待这项艰巨的任务。
对于我的具体情况,重要的是每个任务必须处理一次。
我一直在查看RabbitMQ,但是我还没有找到一种让消费者(在这种情况下为处理器)订阅所有与模式匹配的队列的方法,例如队列可以订阅交换。
Kafka似乎具有我想要的客户端分区,但是似乎无法提供足够的确定性,因为任务将一次执行。多个消费者具有不同偏移量的能力甚至可以进一步放大。
是否存在可以设置为执行我所描述的内容的消息队列代理?
答案 0 :(得分:0)
根据您的情况,无法保证只进行一次处理。任务处理完成后,消息传递系统应该怎么做,但是由于硬件故障,确认未传递?它可以删除消息(实际上是失去客户的请求),也可以重新传递(恰好违反一次)。应该有一种方法检查请求是否已被处理。这将使您使任务处理成为幂等。
顺便说一句,我认为队列并不适合您的用例。检出Cadence Workflow,即可为您提供许多功能,并能立即查看处理过程。
与使用队列进行任务处理相比,Cadence具有许多优势。
请参见介绍Cadence编程模型的the presentation。