使用 JMS + CCDT 文件连接到 IBM MQ 时出现负载平衡问题
Load balancing issue while connecting to IBM MQ using JMS + CCDT file
我们正在尝试使用 CCDT 文件和 JMS 配置连接到 IBMMQ。
我们能够连接到它,但这里有一个问题:
由于我们使用 spring 通过 CCDT 文件设置连接工厂,它在应用程序启动时初始化一次,但不幸的是它一次只选择一个队列管理器,即它发送所有消息发送到同一个队列管理器并且它没有负载平衡。
虽然我观察到,如果我在每个请求之前手动设置 CCDT 文件,那么它能够负载平衡队列管理器,理想情况下,在我看来队列管理器是在我将 URL 设置为 CCDT 文件时决定的.这是错误的做法。我的期望是使用 CCDT 文件初始化连接工厂,然后此配置将能够自行负载平衡。
你能帮我吗?
这是预期的行为。 MQ 不对客户端进行负载平衡,它对它们进行连接平衡。该连接是最耗时的 API 调用,在相互验证的 TLS 连接的情况下,可能需要几秒钟才能完成。因此,一个好的应用程序设计将尝试连接一次,然后在会话期间保持该连接。 JMS 体系结构和 Spring 框架都需要这种模式。
MQ 提供负载分配的方式(同样,不是真正的 balancing,而是循环 distribution)是客户端连接一个远离集群目标队列的跃点。发往该集群目标队列的消息将在该队列的所有实例之间循环。
如果它是请求-回复应用程序,则在这些集群队列实例上侦听请求的事物使用来自请求消息的 Reply-To QMgr 和 Reply-To Queue 名称来寻址回复消息。在这种情况下,如果请求者失去连接,他们可以将 QMgr 故障转移到 QMgr。在集群队列上侦听的记录系统通常不会跨队列管理器进行故障转移,以确保为所有队列实例提供服务并进行事务恢复。
简短的回答是 CCDT 和 MQ 客户端通常 而不是 发生 MQ 负载分配的地方。客户端应建立连接并尽可能长时间地保持连接。客户端重新连接和 CCDT 仅用于 连接 平衡。
负载分布是MQ集群的一个特性。它需要集群队列的多个实例,这些实例通常距离放置消息的客户端应用程序有一个网络跃点。
我们正在尝试使用 CCDT 文件和 JMS 配置连接到 IBMMQ。 我们能够连接到它,但这里有一个问题:
由于我们使用 spring 通过 CCDT 文件设置连接工厂,它在应用程序启动时初始化一次,但不幸的是它一次只选择一个队列管理器,即它发送所有消息发送到同一个队列管理器并且它没有负载平衡。
虽然我观察到,如果我在每个请求之前手动设置 CCDT 文件,那么它能够负载平衡队列管理器,理想情况下,在我看来队列管理器是在我将 URL 设置为 CCDT 文件时决定的.这是错误的做法。我的期望是使用 CCDT 文件初始化连接工厂,然后此配置将能够自行负载平衡。
你能帮我吗?
这是预期的行为。 MQ 不对客户端进行负载平衡,它对它们进行连接平衡。该连接是最耗时的 API 调用,在相互验证的 TLS 连接的情况下,可能需要几秒钟才能完成。因此,一个好的应用程序设计将尝试连接一次,然后在会话期间保持该连接。 JMS 体系结构和 Spring 框架都需要这种模式。
MQ 提供负载分配的方式(同样,不是真正的 balancing,而是循环 distribution)是客户端连接一个远离集群目标队列的跃点。发往该集群目标队列的消息将在该队列的所有实例之间循环。
如果它是请求-回复应用程序,则在这些集群队列实例上侦听请求的事物使用来自请求消息的 Reply-To QMgr 和 Reply-To Queue 名称来寻址回复消息。在这种情况下,如果请求者失去连接,他们可以将 QMgr 故障转移到 QMgr。在集群队列上侦听的记录系统通常不会跨队列管理器进行故障转移,以确保为所有队列实例提供服务并进行事务恢复。
简短的回答是 CCDT 和 MQ 客户端通常 而不是 发生 MQ 负载分配的地方。客户端应建立连接并尽可能长时间地保持连接。客户端重新连接和 CCDT 仅用于 连接 平衡。
负载分布是MQ集群的一个特性。它需要集群队列的多个实例,这些实例通常距离放置消息的客户端应用程序有一个网络跃点。