我正在编写一个 java/scala akka 概念证明,目前我在集群环境中摸索演员的概念。
规格
我有一个特定的情况,系统将相同的消息发送到多个节点。我的工作是不丢弃任何这些消息,只将 1 条消息传递给后端系统。就像具有负载平衡/故障转移功能的独特过滤器一样。
主意
我正在考虑在 2 个节点上使用 2 个“前端”actor,系统会将消息发送到前端路由器(比如说循环),该路由器发送到发送到后端的前端actor。
另一个后备解决方案是使用 only-leader-send-to-backend 系统,他们都收到相同的消息,只有领导者将其转发。
问题
我面临的问题(见代码)是我希望路由器使用现有的前端参与者作为集群上的路由。这在示例代码中失败了,因为路由器仅在本地通过routees-path(配置设置)查找路由,没有找到任何并死掉。
我也没有成功配置路由器在集群节点上部署路由。它总是会在本地部署它们。
我在这里有示例代码http://ge.tt/2UHUqoQ/v/0?c。有 2 个入口点 * TransformationSample.App2 - 运行两个实例,每个实例带有命令行参数 2551 和 2552(种子节点) * TransformationSample.App1 - 运行一个不带命令行参数的实例
App1 是尝试创建路由器并与之通信的应用程序,但路由器终止,因为它无法在本地找到前端路由器。我将问题固定到 akka.cluster.routing.ClusterRouteeProvider 类 createRoutees 方法第 178 行https://github.com/akka/akka/blob/releasing-2.1.0-RC1/akka-cluster/src/main/scala /akka/cluster/routing/ClusterRouterConfig.scala。
结束时
我可能在这里做错了什么,请原谅我的 scala(这是我编写它的第一个项目)。
我希望这个路由器工作的原因是因为概念验证的下一步是使用类似的设置对后端系统进行负载平衡,其中前端参与者将与(单独的)后端集群路由器进行通信,该路由器发送与后端演员循环工作。
这是过度设计吗?我们必须对前端进行故障转移,在后端进行负载平衡。