[MQ 9.3.3 2023 年 6 月]

从队列中批量除去已确认的 AMQP 消息

如果 AMQP 应用程序正在使用 QOS_AT_LEAST_ONCE (1) 消息传递,那么 AMQP 服务会等待来自应用程序的应答,然后在将消息发送到应用程序后废弃其保留的消息副本。 从 IBM® MQ 9.3.3开始,已确认的消息将以批处理方式从队列中移除,而不是单独移除,从而提高性能。

关于本任务

对于 Long Term SupportContinuous Delivery before IBM MQ 9.3.3,将分别从队列中除去每条消息。

IBM MQ 9.3.3开始,您可以使用两个系统属性 com.ibm.mq.AMQP.BATCHSZcom.ibm.mq.AMQP.BATCHINT 来微调批量应答的处理,以提高性能:
com.ibm.mq.AMQP.BATCHSZ
此属性定义 AMQP 服务除去消息之前要接收的最大应答数。 该数字可以在 1 到 9999 的范围内。 如果设置了无效数字,或者如果指定的数字超出范围,那么将使用缺省值 50。
批处理大小不会影响消息的传输方式。 将始终单独传输消息,但在 AMQP 服务接收到应答后,将在批处理中除去这些消息。 批处理的实际大小可以小于 com.ibm.mq.AMQP.BATCHINT指定的值。 例如,如果 com.ibm.mq.AMQP.BATCHINT 属性设置的时间段到期,那么批处理将完成。
com.ibm.mq.AMQP.BATCHINT
此属性定义 AMQP 服务在队列中保留已确认消息的时间量 (以毫秒计)。 如果批处理未满,那么将在此持续时间之后清除该批处理。 您可以指定任何毫秒数,从 1 到 999 999 999。 缺省值为 50。 如果未指定此属性的值,那么将使用缺省值 50。
注:
  1. AMQP 服务在丢弃消息之前是否等待应答取决于应用程序用于消息传递的以下两种服务质量中的哪一种:
    • QOS_AT_MOST_ONCE 的 QOS (0)

      如果 AMQP 应用程序正在使用此服务质量,那么它不会确认消息,因此 AMQP 服务会在将消息发送到应用程序后废弃消息,而不等待确认。

    • QOS_AT_LEAST_ONCE (1)

      如果 AMQP 应用程序正在使用此服务质量,那么它会确认消息,因此 AMQP 服务会在将消息发送到应用程序后保留每条消息的副本,直到收到来自应用程序的确认为止。 如果应用程序在确认消息之前断开连接或断开连接,那么该消息可供其他应用程序使用。 AMQP 服务直到确认消息后才会从队列中除去消息。

  2. [MQ Appliance] com.ibm.mq.AMQP.BATCHSZcom.ibm.mq.AMQP.BATCHINT 系统属性在 IBM MQ Appliance上不适用。 在 IBM MQ Appliance上使用缺省值 50。
.

过程

使用 com.ibm.mq.AMQP.BATCHSZcom.ibm.mq.AMQP.BATCHINT 系统属性可对批量应答的处理进行微调。
IBM MQ 9.3.3开始,创建队列管理器时, amqp_java.properties 文件包含系统属性的以下缺省值:
-Dcom.ibm.mq.AMQP.BATCHSIZE=50
-Dcom.ibm.mq.AMQP.BATCHINT=50

根据所使用的消息速率,您可以对批量应答的处理进行微调,以提高性能。 迁移的队列管理器在 amqp_java.properties 文件中没有这些属性。 因此,对于已迁移的队列管理器,或者如果未设置属性,那么将使用缺省值。 您可以添加这些属性以微调值以优化性能。

当满足下列其中一个条件时,将批量除去已确认的消息:
  • 已确认的消息数达到 com.ibm.mq.AMQP.BATCHSZ
  • 在批处理启动后超过 com.ibm.mq.AMQP.BATCHINT
  • 在满足上述两个条件之前,应用程序将断开或关闭队列或主题。