gpt4 book ai didi

java - 使用 JMS + CCDT 文件连接到 IBM MQ 时出现负载平衡问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:54 24 4
gpt4 key购买 nike

我们正在尝试使用 CCDT 文件和 JMS 配置连接到 IBMMQ。我们能够连接到它,但这里有一个问题:

因为我们使用 spring 通过 CCDT 文件设置连接工厂,它在应用程序启动时初始化一次,但不幸的是它一次只选择一个队列管理器,即将所有消息发送到同一个队列管理器并且它没有负载平衡。

虽然我观察到,如果我在每个请求之前手动设置 CCDT 文件,那么它能够负载平衡队列管理器,理想情况下,队列管理器在我将 URL 设置为 CCDT 文件时决定。这是错误的做法。我的期望是使用 CCDT 文件初始化连接工厂,然后此配置将能够自行进行负载平衡。

你能帮我这个吗?

最佳答案

这是预期的行为。 MQ 不对客户端进行负载平衡,它对它们进行连接平衡。连接是最耗时的 API 调用,在相互验证的 TLS 连接的情况下,可能需要几秒钟才能完成。因此,一个好的应用程序设计将尝试连接一次,然后在 session 期间保持该连接。 JMS 架构和 Spring 框架都期望这种模式。

MQ 提供负载分配的方式(同样,不是真正的平衡,而是循环分配)是客户端连接一个远离集群目标的跃点队列。发往该集群目标队列的消息将在该队列的所有实例之间循环。

如果它是一个请求-回复应用程序,在这些集群队列实例上监听请求的事物使用来自请求消息的 Reply-To QMgr 和 Reply-To Queue 名称来寻址回复消息。在这种情况下,如果请求者失去连接,他们可以将 QMgr 故障转移到 QMgr。在集群队列上监听的记录系统通常不会跨队列管理器进行故障转移,以确保所有队列实例都得到服务,并且由于事务恢复。

简短的回答是 CCDT 和 MQ 客户端通常不是发生 MQ 负载分配的地方。客户端应建立连接并尽可能长时间地保持连接。客户端重新连接和 CCDT 仅用于连接平衡。

负载分布是MQ集群的一个特性。它需要集群队列的多个实例,这些实例通常距离放置消息的客户端应用程序有一个网络跃点。

关于java - 使用 JMS + CCDT 文件连接到 IBM MQ 时出现负载平衡问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48404838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com