我希望构建一个能够处理需要长处理时间的请求流的系统,每个处理时间为5分钟。我的目标是以最小的资源占用来加速请求处理,有时可能是一连串的消息。
我可以使用service bus
之类的东西对请求进行排队,并有多个进程(ak中的a.k.a Actors)可以订阅消息并开始处理。也可以有一个监视器,它可以查看服务总线中的队列长度,并创建更多的actor / actor系统或停止一些。
如果我想在Akka.net
这样的Actor系统中做同样的事情,怎么做呢。说这样的话:
我可能想根据请求队列长度启动/停止新的远程Actor系统
将消息发送给可用的参与者中的任何一个,他们可以开始处理,而无需检查谁在发送方进行处理。
这可以通过Akka.net完成,或者这不是actor系统的有效用例。有人可以分享一些想法或指出我可以获得更多细节的资源。
答案 0 :(得分:0)
虽然你可以通过Akka集群实现一些目标,但我不建议这样做。根据您的要求,它明确指出您的顾虑是针对:
您可以使用akka构建消息处理逻辑,例如worker。但正如我所说,如果您的目标是更换现有的服务总线,那么您就不需要它。
答案 1 :(得分:0)
我可能想根据我的请求队列长度
启动/停止新的远程Actor系统
Akka.Cluster不支持开箱即用。你必须为它构建一些自定义的东西。
然而,Akka .NET有pool routers,它们可以根据可配置的参数自动调整大小。你或许能够围绕它们建立一些东西。
将消息发送给可以开始处理的任何一个可用的演员,而不必检查谁有带宽在发送方处理。
如果查看Akka .NET Routers,可以使用各种策略来分配工作。 SmallestMailbox
可能与你所追求的最接近。
不应丢失消息,如果actor失败,则应将其传递给下一个可用的actor。
Akka .NET支持至少一次交付。详细了解in the docs或at the Petabridge blog。