【问题标题】:How to restrict an actor in the clustered akka actorsystem to execute only in one node如何限制集群akka actorsystem中的一个actor只在一个节点上执行
【发布时间】:2016-12-14 04:36:31
【问题描述】:

我有一个有 3 个演员的演员系统,列在下面

  1. RMQreaderActor - 这是从 RMQ 读取消息并告诉以下两个 Actor 转换消息并处理它的 Actor
  2. ConverterActor
  3. ProcessorActor

我的要求是将actorsystem集群在4个节点中,但我不希望所有节点中的RMQreaderactor从队列中读取消息。只有一个节点应该读取消息并告诉其他参与者进行处理。

注意:如果我让所有节点的 RMQreaderactor 从队列中读取消息,那么它会导致重复读取(因为我没有在读取后立即发出 Ack)

你能帮我解决我的要求吗

【问题讨论】:

    标签: akka akka-http akka-cluster


    【解决方案1】:

    我的建议是不要走那条路!由于您希望拥有一个 4 节点集群,因此最好利用所有这些节点,原因如下:

    • 万一该节点出现故障,您没有任何冗余,所以 SPOF
    • 如果其他一些操作在该节点中产生压力,系统的性能就会受到影响,您就会遇到瓶颈

    您可以让所有节点运行 RMQreaderActor,并且由于您使用的是 (rabbit mq) Unacked msg 不会被其他一些消费者(来自不同节点的 RMQreaderActor 的其他实例)拾取 - 除非有我不知道的东西进入你的消费者。

    如果这些不能说服您,请阅读(集群节点角色、单例和代理参与者)http://doc.akka.io/docs/akka/current/scala/cluster-singleton.html - 在这里您会看到如何拥有单例参与者(所有集群节点中参与者的单个实例)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多