两台机器 JVM 之间带有 Ignite 集群的集群 vertx 事件总线
Clustered vertx event bus with Ignite cluster between 2 machines JVMs
我正在尝试将集群事件总线与 Ignite 集群管理器一起使用,集群 vertx 本身工作正常,集群 vertx web 以及现在我正在为 2 个 apache ignite JVM 集群中的集群事件总线而苦苦挣扎 2单独的机器
我知道以下内容:
1- 我们在文档中看到 Ignite 集群对集群 Vertx 执行以下操作:集群管理器不处理事件总线节点间传输,这是通过 Vert.x 使用 TCP 连接直接完成的。
2- 现在的问题是我们如何正确处理两台不同机器之间的集群 vertx 事件总线,集群事件总线需要知道 public 集群主机和 public 集群端口,所以从附加配置,你能告诉我们如何知道 public 集群主机以及每台机器每个节点的端口,以便我们可以为 Ignite 集群上的集群 vertx 事件总线配置相同的端口吗?
两台机器之间没有防火墙或 VPN,这两台机器之间的网络是开放的,但是事件总线无法在两台机器之间正确建立 TCP 连接,因为我看不到正在发送的消息大约在 2 台机器之间,它很早就超时了:
我们的集群配置是这样的:
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="49500"/>
<property name="localPortRange" value="20"/>
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>IP1{machine one IP}:49500..49520</value>
<value>IP2{machine two IP}:49500..49520</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
并且看到消费者地址注册已正确填充到所有节点
那么如何正确配置集群事件总线集群主机和端口才能使跨机器 TCP 连接正常工作?
Vert.x 在事件总线通信中不使用任何 Ignite 配置设置。 Vert.x 唯一的作用是将主题和订阅者存储在集群管理器中(在您的例子中是 Ignite 集群)。您应该根据文档 (http://vertx.io/docs/vertx-core/java/#event_bus):
配置 Vert.x 事件总线
The event bus configuration needs to be consistent in all the cluster
nodes.
The EventBusOptions
also lets you specify whether or not the event bus
is clustered, the port and host, as you would do with setClustered
,
getClusterHost
and getClusterPort
.
在 Vert.x 集群启动之前,您无法获取 Ignite 节点地址。但是在启动集群 Vert.x 实例之前,您应该提供 Vert.x 集群主机和端口设置(参见 VertxOptions.setClusterHost() and VertxOptions.setClusterPort())。
Public 集群主机和 public 集群端口应仅在容器中使用时提供。
我正在尝试将集群事件总线与 Ignite 集群管理器一起使用,集群 vertx 本身工作正常,集群 vertx web 以及现在我正在为 2 个 apache ignite JVM 集群中的集群事件总线而苦苦挣扎 2单独的机器
我知道以下内容:
1- 我们在文档中看到 Ignite 集群对集群 Vertx 执行以下操作:集群管理器不处理事件总线节点间传输,这是通过 Vert.x 使用 TCP 连接直接完成的。
2- 现在的问题是我们如何正确处理两台不同机器之间的集群 vertx 事件总线,集群事件总线需要知道 public 集群主机和 public 集群端口,所以从附加配置,你能告诉我们如何知道 public 集群主机以及每台机器每个节点的端口,以便我们可以为 Ignite 集群上的集群 vertx 事件总线配置相同的端口吗?
两台机器之间没有防火墙或 VPN,这两台机器之间的网络是开放的,但是事件总线无法在两台机器之间正确建立 TCP 连接,因为我看不到正在发送的消息大约在 2 台机器之间,它很早就超时了:
我们的集群配置是这样的:
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="49500"/>
<property name="localPortRange" value="20"/>
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>IP1{machine one IP}:49500..49520</value>
<value>IP2{machine two IP}:49500..49520</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
并且看到消费者地址注册已正确填充到所有节点
那么如何正确配置集群事件总线集群主机和端口才能使跨机器 TCP 连接正常工作?
Vert.x 在事件总线通信中不使用任何 Ignite 配置设置。 Vert.x 唯一的作用是将主题和订阅者存储在集群管理器中(在您的例子中是 Ignite 集群)。您应该根据文档 (http://vertx.io/docs/vertx-core/java/#event_bus):
配置 Vert.x 事件总线The event bus configuration needs to be consistent in all the cluster nodes.
The
EventBusOptions
also lets you specify whether or not the event bus is clustered, the port and host, as you would do withsetClustered
,getClusterHost
andgetClusterPort
.
在 Vert.x 集群启动之前,您无法获取 Ignite 节点地址。但是在启动集群 Vert.x 实例之前,您应该提供 Vert.x 集群主机和端口设置(参见 VertxOptions.setClusterHost() and VertxOptions.setClusterPort())。
Public 集群主机和 public 集群端口应仅在容器中使用时提供。