【发布时间】:2014-01-17 06:43:28
【问题描述】:
我收到了需要以线性方式处理的不同样本(s1、s2、..)的请求(即,当时只有一个说 s1-request 可以处理)。我有 N 个可以处理给定请求的工作人员服务。如何实现 rpc-queue 模式,以便一次消耗一个样本,并且仍然允许在不同样本之间分配计算?
我想用 rabbit-mq 来实现它,因为它很简单,具有集群功能,但我也愿意考虑其他解决方案。
这是一张图片来说明问题(有两个工人)
worker 1
+-----------+
| |
input queue +---->| |-------+
+--------------+ | | | |
| | | +-----------+ |
| s1,s2,s1,s1 |------+ |
| | | worker 2 |
+--------------+ | +-----------+ |
| | | |
output queue +---->| |-------+
+--------------+ | | |
| | +-----------+ |
|(s1,s2,s1,s1) |<-+ |
| | +-----------------------------+
+--------------+
【问题讨论】:
-
只需添加一个额外的间接层,即可解决大多数问题:) 在输入队列和仅存储必须串行处理的对象类型的工作人员之间插入额外的队列。
-
@HansPassant 你能扩展一下这个想法吗?所以我会为每个样本声明一个新队列?我可以在这里使用一些 rabbit-mq 功能还是应该实现一个服务来读取输入队列来路由请求?
-
是的,不,是的 :) 创建不同的消息队列会变得非常简单。
标签: c# rabbitmq message-queue zeromq distributed-computing