8.6. 通过负载均衡器的消息传递

将 JBoss EAP 用作负载平衡器时,客户端可以调用静态 Undertow HTTP 负载平衡器后或 mod_cluster 负载平衡器后面的消息传递服务器。

要支持通过静态负载均衡器调用消息传递服务器的消息传递客户端的配置必须满足以下要求:

  • 将 JBoss EAP 用作负载平衡器时,您必须使用 HTTP 或 HTTPS 配置负载平衡器。AJP 不支持消息传递负载平衡器。

  • 如果在负载平衡器后面的消息传递服务器上进行 JNDI 查找,您必须配置后端消息传递工作程序
  • 连接到负载平衡器的客户端必须重复使用与负载平衡器的初始连接,以确保它们与同一服务器通信。连接到负载均衡器的客户端不能使用集群拓扑连接到负载均衡器。使用集群拓扑可能会导致消息发送到其他服务器,这可能会导致事务处理中断。

有关使用 mod_cluster 将 Undertow 配置为负载平衡器的详细信息,请将 Undertow 配置为使用 mod_cluster 的负载平衡器

配置消息客户端以通过负载均衡器进行通信

连接到负载均衡器的客户端必须配置为重复使用初始连接,而不是使用集群拓扑连接到负载均衡器。

重新使用初始连接可确保客户端连接到同一服务器。使用集群拓扑可能会导致消息定向到不同的服务器,这可能会导致事务处理中断。

用于连接负载平衡器的连接工厂或池式连接工厂必须通过属性 use-topology-for-load-balancing 设置为 false 来配置。以下示例演示了如何在 CLI 中定义此配置:

/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name=use-topology-for-load-balancing, value=false)

配置后端 worker

只有在负载均衡器后计划进行 JNDI 查找时,您必须配置后端消息传递工作程序。

  1. 创建一个新的出站套接字绑定,以指向负载平衡服务器。

    /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=balancer-binding:add(host=load_balance.example.com,port=8080)
  2. 创建一个 HTTP 连接器来引用负载平衡服务器套接字绑定。

    /subsystem=messaging-activemq/server=default/http-connector=balancer-connector:add(socket-binding=balancer-binding, endpoint=http-acceptor)
  3. 将 HTTP 连接器添加到客户端使用的连接工厂。

    /subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=connectors,value=[balancer-connector])

    确保您将客户端配置为重复使用初始连接:

    /subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=use-topology-for-load-balancing,value=false)