集群 Vert.x 服务时,集群 EventBus 处理程序是否传播到新加入的节点?
When clustering a Vert.x service, do clustered EventBus handlers propagate to new joining nodes?
这是我在官方文档或其他任何地方都找不到的东西;我提出的情况基本上是这样的:
- 我有一个集群
N
Vert.x 个相同服务、相同代码库的实例。
- 在某个时间点,我在集群范围内注册了一个地址为
A
的 EventBus 消费者 C
。我订阅了一个完成处理程序,以便在集群的所有节点上完成注册时得到通知。
- 一切正常,但现在我向集群添加了一个新节点。
我的问题实际上有两个方面:
C
消费者是否会传播给新加入者?也就是说,如果我从新加入者执行 eventBus().publish(A, ...)
,处理程序会被执行吗?
- 是否会再次调用完成处理程序(我的猜测是不会,但以防万一)?
当您向集群添加一个新节点时,该应用程序将在该节点上再次启动(如果您正确理解您描述的情况)。
因此,在新节点上,您将使用地址 A
在集群范围内注册一个 EventBus 使用者。
新节点将知道之前在集群上创建的所有注册。先前的节点将知道新的注册。
当您从新加入者执行 eventBus().publish(A, ...)
时,所有包含它的节点将调用为此地址注册的消费者。
在新加入者上,完成处理程序将在注册持久化时调用。在新注册从其他节点可见之前可能会有(非常小的)延迟,因为该过程是异步的。
不会再调用之前节点上的completion handler(因为已经注册了相应的consumer)
这是我在官方文档或其他任何地方都找不到的东西;我提出的情况基本上是这样的:
- 我有一个集群
N
Vert.x 个相同服务、相同代码库的实例。 - 在某个时间点,我在集群范围内注册了一个地址为
A
的 EventBus 消费者C
。我订阅了一个完成处理程序,以便在集群的所有节点上完成注册时得到通知。 - 一切正常,但现在我向集群添加了一个新节点。
我的问题实际上有两个方面:
C
消费者是否会传播给新加入者?也就是说,如果我从新加入者执行eventBus().publish(A, ...)
,处理程序会被执行吗?- 是否会再次调用完成处理程序(我的猜测是不会,但以防万一)?
当您向集群添加一个新节点时,该应用程序将在该节点上再次启动(如果您正确理解您描述的情况)。
因此,在新节点上,您将使用地址 A
在集群范围内注册一个 EventBus 使用者。
新节点将知道之前在集群上创建的所有注册。先前的节点将知道新的注册。
当您从新加入者执行 eventBus().publish(A, ...)
时,所有包含它的节点将调用为此地址注册的消费者。
在新加入者上,完成处理程序将在注册持久化时调用。在新注册从其他节点可见之前可能会有(非常小的)延迟,因为该过程是异步的。
不会再调用之前节点上的completion handler(因为已经注册了相应的consumer)