【问题标题】:How to Get message count in a durable subscriber in IBM MQ?如何在 IBM MQ 的持久订阅者中获取消息计数?
【发布时间】:2022-02-01 20:49:28
【问题描述】:

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

所以我想使用 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)

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

【问题讨论】:

  • 你想知道有多少消息已经发送给持久订阅者(我认为这是 Explorer 正在显示的),还是你想知道有多少未使用的消息正在等待持久订阅者.这可能是两个不同的值。
  • @JoshMc 所以,我假设图像中看到的消息数是未使用的消息
  • 否 - 图像中看到的消息数是传递到该订阅者队列的消息数。无论它们是否已从订阅者队列中消耗,都不会反映在该数量中。

标签: ibm-mq jms-topic


【解决方案1】:

每个 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)

【讨论】:

    【解决方案2】:

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

    DISPLAY SUB
    

    查看静态配置。

    DISPLAY SBSTATUS
    

    查看实时运行时状态数字。

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

    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
    

    【讨论】:

    • 我想可能是因为他们提到“如果我生成一些消息但不使用它们,它们会保留在持久客户端的订阅中”,他们真的想要队列 CURDEPTH。
    • 嗨@JoshMc 我刚刚回答了“我需要的是下图中可以看到的消息计数”这句话——它显示了一个 MQ Explorer 订阅状态​​窗口。
    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2017-11-08
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2015-08-11
    相关资源
    最近更新 更多