8.6. 集群拓扑通信
jboss-ejb-client.properties
文件的使用已弃用,而是使用 wildfly-config.xml
文件。
客户端连接到服务器时,如果服务器具有集群功能,JBoss EJB 客户端实施会在内部与服务器通信集群拓扑信息。例如,假设服务器 X 列为要连接的初始服务器,当客户端连接到服务器 X 时,服务器会将异步群集拓扑消息发回给客户端。此拓扑消息由集群名称和属于集群的节点的信息组成。需要时,节点信息包括要连接的节点地址和端口号。因此在此示例中,服务器 X 将发回由属于该群集的其他服务器 Y 组成的群集拓扑。
如果群集化为 EJB,则调用流程会分为两个步骤:
- 为有状态 Bean 创建会话,当您为该 Bean 进行 Java 命名和目录接口查找时会出现这种情况。
- 调用返回的代理。
查找有状态 Bean 在内部会触发从客户端到服务器同步会话创建请求。在这种情况下,会话创建请求将转到 server X,因为它已在 jboss-ejb-client.properties
文件中配置。由于服务器 X 已群集化,因此它将返回会话 ID 并发回该会话的关联。如果是集群服务器,则关联性等同于有状态 Bean 所属群集的名称。对于非集群 Bean,关联性是创建会话的节点名称。这种关联性将帮助 EJB 客户端根据需要将代理上的调用路由到集群中用于集群 Bean 的节点,或路由到非集群 Bean 的特定节点。在此会话创建请求期间,服务器 X 也会发回包含群集拓扑的异步消息。JBoss EJB 客户端实施将记录此拓扑信息,并在稍后将其用于在群集内创建连接,并在需要时将调用路由到这些节点。
要了解故障转移的工作方式,请考虑同一服务器 X 示例作为起点,以及寻找有状态 Bean 并调用它的客户端应用。在这些调用过程中,客户端从服务器收集集群拓扑信息。假设出于某种原因,服务器 X 停机,客户端应用随后在代理上调用。在此阶段,JBoss EJB 客户端实施必须清楚关联性,在这种情况下,它是集群相关性。从客户端具有的集群拓扑信息中,它知道群集有两个节点:服务器 X 和 server Y。当调用到达时,客户端会注意到服务器 X 已停机,因此它使用选择器从群集节点获取合适的节点。当选择器从集群节点返回节点时,如果连接之前尚未创建,JBoss EJB 客户端实施会创建与该节点的连接,并从中创建 EJB 接收器。在本示例中,集群中唯一的其他节点是 server Y,选择器将返回服务器 Y 作为节点,JBoss EJB 客户端实施将使用它在其中创建 EJB 接收器,并使用此接收方在代理上传递调用。实际上,调用现在切换到集群中的不同节点。