RabbitMQ / c# - 同时只持有 100 运行 个任务

RabbitMQ / c# - hold only 100 running tasks at the same time

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

我的控制器功能:

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

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

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

我想将每个函数发送到 "hold",然后 "unhold" 当我 运行 少于 100 个任务时发送它。

我如何使用 RabbitMQ 做到这一点?

非常感谢。

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

将您的消息消费者设置为 "prefetch" 消费者限制为 100。这将保证您的消费者当前正在处理的消息绝不会超过 100 条。

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

我认为您对 rabbitmq 没有任何问题。我相信您的应用程序架构存在问题。你无法用 rabbit 解决问题中描述的问题。

在基于消息的架构中,处理器的数量 (n=100) 是恒定的。它们是在同一台机器上还是在多台机器上都没有关系。每个处理器从队列中提取消息以确保工作负载平衡。

所描述的体系结构似乎有 n=unknown 处理器,并为每个新请求创建一个新处理器。如前所述,一旦 n>100,系统就会崩溃。这就是消息架构旨在通过将请求汇集到队列来防止负载均衡和管理的目的。

建议通过查看您的架构来解决您的问题。