微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从“外部”向分片Akka群集中的Actor发送命令?

如何解决如何从“外部”向分片Akka群集中的Actor发送命令?

考虑到我们有两项服务:

  • Service1:由启用了群集和分片功能的Akka应用程序组成的分片Akka群集
  • Service2(不是基于Akka的):将命令发送到分片的Akka群集(Service1)

在Service2中向Service1中的Actor发送命令的代码应该是什么?

还可以使Service2成为Service1(Akka群集)的一部分吗?还考虑到我们只需要维护一个Service2实例。例如,使用Akka群集节点角色?

解决方法

通常,如果Service1之外的组件要与Service1进行交互,则Service1应该公开HTTP / GRPC端点(Akka HTTP和Akka GRPC非常适合此操作,但是任何HTTP / GRPC框架都可以使用)或订阅消息代理(例如Kafka或Pulsar(Alpakka Kafka和pulsar4s具有Akka集成)。

通常,我上面列出的框架公开了请求/消息流,因此Service1中的代码概要为

emailUser.getCurrentUser().linkWithCredential(phoneUserCredential)

响应通过HTTP / GRPC发送回或发布到Service2正在侦听的Kafka / Pulsar主题。如果这些命令更加激怒而忘记了,那么您可以:

 val parallelism = ??? // how many commands in flight from the stream
 source
   .map(constructCommand)
   .mapAsync(parallelism) { cmd =>
     futResponseTo(cmd)
   }

可以合并Service2和Service1。在同一个Akka群集中运行多个服务通常不是一个好主意:您主要是放弃了分解为Service1和Service2的好处(最值得注意的是,可以在不部署另一个服务的情况下进行部署)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?