29.2. 服务器端消息负载平衡
如果在群集的节点之间定义了群集连接,则 JBoss EAP 消息传递将对客户端到达特定节点的消息进行负载平衡。
消息传递集群连接可以配置为以轮循方式对消息进行负载平衡,无论其他节点上是否存在匹配的使用者。也可以将其配置为仅在存在匹配的消费者时分发到其他节点。如需更多信息,请参阅 Message Redistribution 部分。
配置集群连接
群集连接将服务器分组到集群中,以便在群集的节点之间平衡消息。群集连接在 JBoss EAP 服务器配置中利用 cluster-connection 元素定义。
红帽支持在 messaging 。
-activemq 子系统内仅使用一个 cluster- connection
以下是 * 。如需完整的属性列表,请参阅群集连接属性。
-full 和 *-full- ha 配置集中定义的默认 cluster- connection
在上面显示的情况下,集群连接将加载发送到以"jms"开头的地址的消息负载平衡。实际上,此群集连接将应用到所有 JMS 队列和主题,因为它们映射到以子字符串"jms"开头的核心队列。
当使用集群连接发送数据包并处于受阻状态并等待确认时,call-timeout 属性指定在引发异常前等待回复的时长。默认值为 30000。在某些情况下,例如,如果远程 JMS 代理与网络断开连接且事务不完整,则线程可能会停留在连接重新建立前。为避免这种情况,建议使用 call-failover-timeout 属性和 call-timeout 属性。在故障转移尝试期间发出调用时使用 call-failover-timeout 属性。默认值为 -1,即没有超时。有关客户端故障的更多信息,请参阅自动客户端故障切换。
或者,如果您希望集群连接使用静态服务器列表进行发现,您可以使用 static-connectors 属性。例如:
在本例中,我们定义了两台服务器,其中至少一台服务器可用。群集中可能有更多服务器,但初始连接后,将使用其中一个连接器来发现这些服务器。
为重复数据删除配置集群连接
集群连接内部使用核心网桥在集群节点之间移动消息。若要为重复的消息检测配置集群连接,请将 use-duplicate-detection 属性 设置为 true,这是默认值。
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=use-duplicate-detection,value=true)
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=use-duplicate-detection,value=true)
集群用户凭证
在集群节点之间创建连接以组成群集连接时,JBoss EAP 消息使用群集用户和密码。
您可以使用以下管理 CLI 命令来设置集群用户和密码。
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-user,value="NewClusterUser") /subsystem=messaging-activemq/server=default:write-attribute(name=cluster-password,value="NewClusterPassword123")
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-user,value="NewClusterUser")
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-password,value="NewClusterPassword123")
这会将下列 XML 内容添加到 JBoss EAP 配置文件中的 messaging-activemq 子系统:
cluster-user 的默认值为 ACTIVEMQ.CLUSTER.ADMIN.USER,cluster -password 的默认值为 CHANGE ME!!。这些值必须从默认值更改,否则远程客户端将能够使用默认值连接服务器。如果未从默认值更改它们,JBoss EAP 消息传递将检测到这一点并在每次启动时显示警告。
您还可以使用 cluster-credential-reference 属性引用 凭证存储,而不设置集群密码。
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-credential-reference,value={clear-text=SecretStorePassword})
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-credential-reference,value={clear-text=SecretStorePassword})