【发布时间】:2012-11-03 05:17:08
【问题描述】:
我正在编写一个 java/scala akka 概念证明,目前我正在摸索集群环境中的 actor 概念。
规格
我有一个特定的情况,系统将相同的消息发送到多个节点。我的工作是不丢弃任何这些消息,只将 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(这是我编写它的第一个项目)。
我希望这个路由器能够工作的原因是,概念验证的下一步是使用类似的设置对后端系统进行负载平衡,其中前端参与者将与(单独的)后端集群进行通信将工作循环发送到后端参与者的路由器。
这是过度设计的吗?我们必须对前端进行故障转移,在后端进行负载平衡。
【问题讨论】:
标签: java scala cluster-computing akka akka-cluster