Hazelcast 对Vert.x服务进行集群时,集群EventBus处理程序是否会传播到新加入的节点?

Hazelcast 对Vert.x服务进行集群时,集群EventBus处理程序是否会传播到新加入的节点?,hazelcast,vert.x,Hazelcast,Vert.x,这是我在官方文件或其他任何地方都找不到的东西;我提议的情况基本上是这样的: 我有一个相同服务、相同代码库的NVert.x实例集群 在某个时间点,我注册了一个EventBus消费者C,地址为A集群范围。我订阅了一个完成处理程序,以便在集群的所有节点上完成注册时收到通知 一切正常,但现在我向集群添加了一个新节点 我的问题实际上有两个方面: C消费者是否会传播到新加入者?也就是说,如果我从新的joiner执行eventBus().publish(a,…),处理程序会被执行吗 是否会再次调用完成处

这是我在官方文件或其他任何地方都找不到的东西;我提议的情况基本上是这样的:

  • 我有一个相同服务、相同代码库的
    N
    Vert.x实例集群
  • 在某个时间点,我注册了一个EventBus消费者
    C
    ,地址为
    A
    集群范围。我订阅了一个完成处理程序,以便在集群的所有节点上完成注册时收到通知
  • 一切正常,但现在我向集群添加了一个新节点
我的问题实际上有两个方面:

  • C
    消费者是否会传播到新加入者?也就是说,如果我从新的joiner执行
    eventBus().publish(a,…)
    ,处理程序会被执行吗
  • 是否会再次调用完成处理程序(我猜是否,只是以防万一)

当您向集群添加新节点时,将在此节点上再次启动应用程序(如果正确理解了您描述的情况)

因此,在新节点上,您将使用for address
A
集群范围注册一个EventBus使用者

新节点将知道以前在集群上创建的所有注册。以前的节点将知道新的注册

当您从新加入者执行
eventBus().publish(A,…)
时,包括它的所有节点都将调用为此地址注册的使用者

在新joiner上,当注册被持久化时,将调用完成处理程序。在新注册从其他节点可见之前可能会有(非常小的)延迟,因为该过程是异步的


以前节点上的完成处理程序将不再被调用(因为相应使用者的注册已经发生)。

>谢谢,我认为这一行特别回答了我的问题。我的用例是,一旦多个物联网设备通过套接字连接到一个实例,就为它们创建一个消费者。每个使用者都有带有设备IMEI(
iot-$IMEI
)的自定义地址,因此我可以从群集中的任何位置向特定设备发送消息,我认为WriteHandlerId仍然不支持。因此,如果新节点自动知道群集中其他实例创建的每个注册之前,它应该能够通过向特定地址发送消息来与任何物联网设备通信(即使该物联网设备的套接字在另一个实例中打开),对吗?每个TCP连接注册的消费者都是本地消费者,因此您不能从任何节点发送消息,而只能从接收TCP连接的位置发送消息。在Vert.x4中,计划将其设置为可配置的。