[MQ 9.4.0 2024 年 6 月][UNIX、Linux、Windows、IBM i]

影响 IBM MQ classes for JMS 中的应用程序重新平衡

IBM® MQ 9.4.0开始,您可以使用其他常量来设置 ConnectionFactory上的均衡选项属性。 仅当 WMQ_PROVIDER_VERSION 设置为 7时,这些常量才适用。 统一集群中的 Request_reply 应用程序必须允许丢失应答的可能性。

可用的常量

以下常量是用于影响 IBM MQ classes for JMS中的应用程序均衡的常量:
重新平衡应用程序类型
平衡操作的类型; 由常量 WMQConstants.WMQ_BALANCING_APPLICATION_TYPE 表示
  • 必须使用此属性来设置 MQBNO 结构的 ApplicationType 字段。
    必须设置整数类型的值。 以下是可能的值:
    WMQConstants.WMQ_BALANCING_APPLICATION_TYPE_SIMPLE (缺省值)
    简单平衡;除 影响统一群集中的应用程序重新平衡 中所述的规则外,不应用其他特定规则。
    WMQConstants.WMQ_BALANCING_APPLICATION_TYPE_REQUEST_REPLY
    请求-应答平衡; 在每个 MQPUT 调用之后,响应消息需要一个匹配的 MQGET 调用。 将延迟均衡,直到接收到此类消息,或者已超出请求消息 EXPIRY
    如果应用程序启用了重新连接并且未设置此属性,那么将使用 WMQConstants.WMQ_BALANCING_APPLICATION_TYPE_SIMPLE
重新平衡选项
由发出应用程序设置的平衡选项; 由常量 WMQConstants.WMQ_BALANCING_OPTIONS 表示
  • 必须使用此属性来设置 MQBNO 结构的 BalanceOptions 字段。
    必须设置整数类型的值。 以下是可能的值:
    WMQConstants.WMQ_BALANCING_OPTIONS_NONE (缺省值)
    未设置任何选项。
    WMQConstants.WMQ_BALANCING_OPTIONS_IGNORE_TRANSACTIONS
    设置此选项将允许重新平衡应用程序,即使在事务过程中也是如此。
    如果应用程序启用了重新连接并且未设置此属性,那么将使用 WMQConstants.WMQ_BALANCING_OPTIONS_NONE
重新平衡超时
超时,在此超时之后,重新平衡可能会中断应用程序活动; 由常量 WMQConstants.WMQ_BALANCING_TIMEOUT 表示
  • 必须使用此属性来设置 MQBNO 结构的 Timeout 字段。
    必须设置整数类型的值。 以下是可能的值:
    WMQConstants.WMQ_BALANCING_TIMEOUT_AS_DEFAULT (缺省值)
    设置的缺省超时值。 缺省情况下,此值为 10 秒。
    WMQConstants.WMQ_BALANCING_TIMEOUT_IMMEDIATE
    发生立即超时。
    WMQConstants.WMQ_BALANCING_TIMEOUT_NEVER
    不发生超时。
    1 到 999999999 之间的值
    这表示以秒为单位的值。
    注: 必须仅从定义的值中提供一个值,或者提供 0-999999999 秒的值。

这些属性在使用 JMSAdminIBM MQ Explorer 接口的连接工厂的 JNDI 表示中也可设置。

在平衡 REQUEST_REPLY 应用程序时丢失消息的可能性

IBM MQ classes for JMS (和 IBM MQ classes for Jakarta Messaging) 中,通过设置请求消息上的 JMSReplyTo 属性来实现请求/应答功能,响应应用程序使用此属性来确定是否发送应答。 在 JMS 术语中, JMSReplyTo 属性是 Destination

将此属性转换为 IBM MQ 操作时,会将 JMSReplyTo 属性作为标准队列 URI 发送-用于标识特定队列管理器上的队列。

由于处理均衡重新连接的异步性质,在将 JMSReplyTo 属性转换为标准 URI 之后,但在将请求消息放入请求队列之前,可能会启动重新连接。 在这些情况下,响应应用程序可能会将其响应发送到原始队列管理器上的原始应答队列,但请求应用程序现在可能正在等待新队列管理器上的应答。

因此,统一集群中的 Request_reply 应用程序必须允许丢失应答的可能性。