rabbitmq—使用多个队列,一次在一个worker池中使用一个项

7uhlpewt  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(439)

我的用户在网上协同编辑数据。我的产品需要他们的编辑使原子。我不能保证它在数据库级别,所以我想一次执行一个更新。
以下是能够并行处理多个文档所需的内容:
假设我们有两个文件a和b
1) 队列服务器开始为空
2) 1个用户提交文档a的更新
3) 队列服务器接收更新,创建queuea并将更新放入其中
4) 3其他用户向documenta提交更新,这些更新在queuea中排队
5) 其他2个用户提交文档b的更改,这些更改在新队列b中排队
6) 工作池已启动。
7) worker1发出一个请求,queuea的第一条消息被传递(尽管如果它是queueb中的第一条消息则不是问题)。queuea被标记为忙碌,直到它得到响应
8) 另一个工作进程发出请求时,将返回queueb中的项。queueb被标记为忙碌。
9) 在第三个请求中,由于两个队列都很忙,因此不返回任何内容。
10) 第一个worker完成了它的任务,调用了代理,queuea不再忙了。
11) 工作进程发出请求时,它应该从队列中获取消息。
12) 工作进程b超时,这将释放队列b以供消息使用。
我已经开始读兔子mq,aws sqs/sns,Kafka。。。我对这个领域不是很了解,但令我惊讶的是,我还没有在网上找到一个符合我要求的系统。现在我不知道我的设计是否有我没有看到的问题,如果我只是没有找到适合我使用的关键字或软件。。。可伸缩性应该很容易,这就是我研究这些工具的原因。
如何轻松实现此设计?

bxjv4tth

bxjv4tth1#

这是一个应用程序设计问题,很难在堆栈溢出的答案中准确解决。您所做的听起来像是使用队列来缓冲和缩放数据的异步处理。比例部分很简单。。您可以添加更多的使用者(也称为正在运行的服务进程),请求可以单独并行处理。
我认为考虑这个问题的最佳方法是将它分解为数据处理的各个步骤,并将队列作为其他不同进程的入口和出口。不仅如此,我还需要一些白板时间来浏览整个问题空间。
activemq和rabbitmq听起来更适合这里。迫于压力,我推荐一个,我倾向于使用activemqb/c,因为它基于java,大多数商店都知道如何监控和支持基于java的应用程序。sqs是有限的,考虑到这听起来像是业务数据,使用http作为传输不是一个健壮的解决方案。Kafka在这里听起来不合适。

相关问题