RabbitMQ / c# - 同时只保存100个正在运行的任务

时间:2016-02-01 18:51:49

标签: c# parallel-processing rabbitmq

我有一个单击按钮的网页 - 向我的控制器发送多个ajax请求。 (并行)

我的控制器功能:

public string myFunction(string servername)
{
    return "respose for " + servername
}

我的服务器可以同时处理 100个运行的tak(myFunction) - 否则会崩溃。

RabbitMQ正在我的localhost服务器上运行。

我想将每个功能发送到" hold"和" unhold"当我运行少于100个任务时。

我怎么能用RabbitMQ做到这一点?

非常感谢。

2 个答案:

答案 0 :(得分:1)

我不相信你对rabbitmq有问题。我相信您的应用程序架构存在问题。兔子无法解决问题中描述的问题。

在基于消息的体系结构中,处理器数量(n = 100)是不变的。它们是在同一台机器还是多台机器上并不重要。每个处理器从队列中提取消息以确保工作负载平衡。

所描述的架构似乎具有n =未知处理器,并为每个新请求创建一个新处理器。如上所述,一旦n> 100,系统就会爆炸。这就是消息体系结构旨在通过将请求汇集到队列中来防止负载,可以平衡和管理负载。

建议您查看自己的架构来解决问题。

答案 1 :(得分:0)

一旦进入您的控制器,就通过RabbitMQ发送所有请求。

使用"预取"设置您的消息使用者对消费者的限制为100。这将保证您的消费者永远不会有超过100条正在处理的消息。

https://www.rabbitmq.com/consumer-prefetch.html