gpt4 book ai didi

java - Akka 路由消息每个 id 具有单个运行实例

转载 作者:行者123 更新时间:2023-12-01 08:57:17 25 4
gpt4 key购买 nike

假设我有一系列消息,其中包含标识客户端的 ID。不同客户端的消息可以并行处理。同一客户端的消息一次只能处理一条。

使用 Akka,我希望能够将消息路由到参与者池,但满足每个客户端 ID 最多一个并发参与者的限制。

解决这个问题的最佳方法是什么?我是否误解了 Akka 背后的任何概念,或者试图应用不适合 Actor 模型的传统概念?

最佳答案

我相信这可以非常简单地适合 Actor 模型。根据定义,单个参与者按顺序处理其传入消息,解决此问题的一种简单方法可能是为每个客户端创建一个参与者。

以这个简单的示例为例,您使用一个参与者作为路由器,并为每个现有客户端使用一个工作人员。

  class Boss extends Actor {

override def receive: Receive = jobHandler(Map.empty[ClientId, ActorRef])

def jobHandler(workers: Map[ClientId, ActorRef]): Receive = {

case j@Job(id, ...) if workers contains id =>
workers(id) ! j

case j@Job(id, ...) =>
val worker = context.actorOf(Props[Worker])
worker ! j
context.become(jobHandler(workers + (id -> worker)))
}
}

class Worker extends Actor {
override def receive: Receive = {
case Job(...) => doStuff(...)
}
}

请记住, Actor 非常轻量级,因此即使您需要跟踪很多 Actor ,这也适用。

关于java - Akka 路由消息每个 id 具有单个运行实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41967086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com