如何在 IBM MQ 的持久订阅者中获取消息计数?

How to Get message count in a durable subscriber in IBM MQ?

我正在使用默认的 IBM mq 主题 'dev/' 并且有一个持久订阅者附加到该主题。 如果我生成一些消息但不使用它们,则使用 JMS 生产者客户端,它们将保存在持久客户端的订阅中。

所以我想使用 MQSC 命令检查该订阅的消息计数,我可以在订阅状态下使用 MQ Explorer 检查它,但我想使用 MQSC 通过命令行检查它。到目前为止我有

DISPLAY SUB('JMS:QM1:LOCALDB.vanshaj.pump_fs_ns_Pump:LOCALDB.vanshaj.pump_fs_ns_Pump') ALL

但这只显示以下属性

AMQ8096I: IBM MQ subscription inquired.
   SUBID(414D5120514D31202020202020202020CDBBF261053D4321)
   SUB(JMS:QM1:LOCALDB.vanshaj.pump_fs_ns_Pump:LOCALDB.vanshaj.pump_fs_ns_Pump)
   TOPICSTR(dev/)                          TOPICOBJ( )
   DISTYPE(RESOLVED)                    
   DEST(SYSTEM.MANAGED.DURABLE.61F2BBCD21433D04)
   DESTQMGR(QM1)                           PUBAPPID( )
   SELECTOR( )                             SELTYPE(NONE)
   USERDATA( )                          
   PUBACCT(0000000000000000000000000000000000000000000000000000000000000000)
   DESTCORL(414D5120514D31202020202020202020CDBBF261053D4321)
   DESTCLAS(MANAGED)                       DURABLE(YES)
   EXPIRY(UNLIMITED)                       PSPROP(MSGPROP)
   PUBPRTY(ASPUB)                          REQONLY(NO)
   SUBSCOPE(ALL)                           SUBLEVEL(1)
   SUBTYPE(API)                            VARUSER(ANY)
   WSCHEMA(TOPIC)                          SUBUSER(app)
   CRDATE(2022-01-28)                      CRTIME(12:11:30)
   ALTDATE(2022-01-28)                     ALTTIME(12:14:14)

我需要的是消息数,如下图所示

有两个查看订阅的命令,类似于许多其他 IBM MQ 资源。

DISPLAY SUB

查看静态配置

DISPLAY SBSTATUS

查看实时 run-time 状态 号码。

在后一个命令中,您将找到屏幕截图中显示的 订阅状态 详细信息。

AMQ8099I: IBM MQ subscription status inquired.
   SUB(ABC.1)                           
   SUBID(414D51204D51473120202020202020207E20475E2237A83F)
   SUBUSER(mqgusr1)                        RESMDATE( )
   RESMTIME( )                             LMSGDATE( )
   LMSGTIME( )                          
   ACTCONN(000000000000000000000000000000000000000000000000)
   DURABLE(YES)                            MCASTREL( , )
   NUMMSGS(0)                              SUBTYPE(ADMIN)
   TOPICSTR(xx/yy/zz)                   

如果您想查看有多少消息已传递给订阅者,但尚未被应用程序使用,那么您应该针对 DISPLAY SUB() DEST 属性中列出的队列名称发出以下命令.

DISPLAY QLOCAL(SYSTEM.MANAGED.DURABLE.61F2BBCD21433D04) CURDEPTH

每个 IBM MQ 订阅都与一个用于保存消息的队列相关联。队列显示在订阅的 DEST 字段中。在您的示例中,队列名称是 SYSTEM.MANAGED.DURABLE.61F2BBCD21433D04.

如果您想查看未使用消息的数量,您需要显示与订阅关联的队列的 CURDEPTH,例如:

DIS QLOCAL(SYSTEM.MANAGED.DURABLE.61F2BBCD21433D04) CURDEPTH

输出将如下所示:

AMQ8409I: Display Queue details.
   QUEUE(SYSTEM.MANAGED.DURABLE.61F2BBCD21433D04)
   TYPE(QLOCAL)                            CURDEPTH(128)

IBM MQ 托管订阅(所有 JMS 订阅都是托管的,因为您无法指定要使用的自己的队列)将具有以下格式的名称:

对于非持久订阅:

SYSTEM.MANAGED.NDURABLE.*

对于持久订阅:

SYSTEM.MANAGED.DURABLE.*

如果您对所有具有未使用消息的托管订阅感兴趣,您可以使用此命令:

DIS QLOCAL(SYSTEM.MANAGED.*) WHERE(CURDEPTH GT 0)