特定Akka用例

特定Akka用例,akka,Akka,我有一个关于Akka实现的特定用例 我有一组探员给阿克卡发送心跳信号。Akka接受这个心跳,并分配参与者将它们发送到我的元数据服务器(一个单独的服务器)。这部分已经完成 现在,我的元数据服务器还需要向代理发送操作信息。但是,由于这些代理可能位于防火墙后面,Akka无法直接与它们通信,因此需要将操作作为对心跳的响应发送。因此,当元数据服务器发送动作时,Akka将其存储在DurableMessageQueue(每个agentID)中,并在HashMap中保持代理ID到DurableMessageQu

我有一个关于
Akka
实现的特定用例

我有一组探员给阿克卡发送心跳信号。Akka接受这个心跳,并分配参与者将它们发送到我的元数据服务器(一个单独的服务器)。这部分已经完成

现在,我的元数据服务器还需要向代理发送操作信息。但是,由于这些代理可能位于防火墙后面,Akka无法直接与它们通信,因此需要将操作作为对心跳的响应发送。因此,当元数据服务器发送动作时,Akka将其存储在
DurableMessageQueue
(每个
agentID
)中,并在
HashMap
中保持代理ID到
DurableMessageQueue
的映射。然后,无论何时心跳到来,在响应之前,它都会检查这个队列,并在响应中携带动作

问题是,
HashMap
将位于单个JVM中,因此我无法扩展它。我是否遗漏了什么,或者有更好的方法吗


我让Akka在Mina服务器后面运行,Mina服务器负责接收和发送消息。

我对这里的一个细节感到困惑。您说代理正在发送心跳,并且对心跳有响应。探员是如何发送心跳的?您是否使用Akka通过
ask
)或其他协议(即http)来完成此操作?我之所以这么问,是因为如果您使用的是
ask
,那么响应就不是真正的请求/响应,响应的参与者需要能够“看到”发起者(没有防火墙阻止通信),以便将响应发送回发起者。心跳通过https协议发送,并加热Mina服务器。如果您想坚持这种方法,并且希望能够支持多个JVM,那么您可以考虑在memcached/couchbase或redis中外部化这些操作。关键是代理id,redis的值可以是操作列表。如果memcached,它可能是一个原子附加到的字符串。当拾取发生时,您清除该键,以便下一次心跳不会拾取任何内容。