【问题标题】:Websphere MQ Back-out queue configurationWebsphere MQ 回退队列配置
【发布时间】:2020-03-14 10:33:12
【问题描述】:

我有 DMLC 侦听器,用于侦听来自 Websphere MQ 7.5.0.2 的消息。当有毒消息时,我希望在MQ中的重试计数到期后将其放入back-out Q中。

我在MQ上配置了回退队列,阈值为3。

但是,当我在侦听器上抛出异常时,实际发生了什么,消息仍然被重新传递超过 3 次,并且消息每次都返回到同一个队列,并且循环不断重复。 MQ 中的回退阈值增加,但消息永远不会进入回退队列。

我是否在某处遗漏了什么?如果我希望将消息放入回退队列,我应该怎么做。 参考下面的官方文档,没有任何额外的配置。

Websphere Poison Message Handling

我需要做任何额外的配置吗?

队列详情

AMQ8409: Display Queue details.   (This is the Source Queue)
   QUEUE(Q3)                               TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2020-03-12)
   ALTTIME(22.16.44)                       BOQNAME(ORANGE.LOCAL.QUEUE)
   BOTHRESH(4)                             CLUSNL( )
   CLUSTER( )                              CLCHNAME( )
   CLWLPRTY(0)                             CLWLRANK(0)
   CLWLUSEQ(QMGR)                          CRDATE(2019-09-16)
   CRTIME(15.22.49)                        CURDEPTH(2)
   CUSTOM( )                               DEFBIND(OPEN)
   DEFPRTY(0)                              DEFPSIST(NO)
   DEFPRESP(SYNC)                          DEFREADA(NO)
   DEFSOPT(SHARED)                         DEFTYPE(PREDEFINED)
   DESCR( )                                DISTL(NO)
   GET(ENABLED)                            HARDENBO
   INITQ( )                                IPPROCS(0)
   MAXDEPTH(5000)                          MAXMSGL(4194304)
   MONQ(QMGR)                              MSGDLVSQ(PRIORITY)
   NOTRIGGER                               NPMCLASS(NORMAL)
   OPPROCS(0)                              PROCESS( )
   PUT(ENABLED)                            PROPCTL(COMPAT)
   QDEPTHHI(80)                            QDEPTHLO(20)
   QDPHIEV(DISABLED)                       QDPLOEV(DISABLED)
   QDPMAXEV(ENABLED)                       QSVCIEV(NONE)
   QSVCINT(999999999)                      RETINTVL(999999999)
   SCOPE(QMGR)                             SHARE
   STATQ(QMGR)                             TRIGDATA( )
   TRIGDPTH(1)                             TRIGMPRI(0)
   TRIGTYPE(FIRST)                         USAGE(NORMAL)


AMQ8409: Display Queue details.     (This is the backout queue)
   QUEUE(ORANGE.LOCAL.QUEUE)               TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2020-03-12)
   ALTTIME(21.27.17)                       BOQNAME( )
   BOTHRESH(0)                             CLUSNL( )
   CLUSTER( )                              CLCHNAME( )
   CLWLPRTY(0)                             CLWLRANK(0)
   CLWLUSEQ(QMGR)                          CRDATE(2020-03-12)
   CRTIME(21.27.17)                        CURDEPTH(0)
   CUSTOM( )                               DEFBIND(OPEN)
   DEFPRTY(0)                              DEFPSIST(NO)
   DEFPRESP(SYNC)                          DEFREADA(NO)
   DEFSOPT(SHARED)                         DEFTYPE(PREDEFINED)
   DESCR( )                                DISTL(NO)
   GET(ENABLED)                            HARDENBO
   INITQ( )                                IPPROCS(0)
   MAXDEPTH(5000)                          MAXMSGL(4194304)
   MONQ(QMGR)                              MSGDLVSQ(PRIORITY)
   NOTRIGGER                               NPMCLASS(NORMAL)
   OPPROCS(0)                              PROCESS( )
   PUT(ENABLED)                            PROPCTL(COMPAT)
   QDEPTHHI(80)                            QDEPTHLO(20)
   QDPHIEV(DISABLED)                       QDPLOEV(DISABLED)
   QDPMAXEV(ENABLED)                       QSVCIEV(NONE)
   QSVCINT(999999999)                      RETINTVL(999999999)
   SCOPE(QMGR)                             SHARE
   STATQ(QMGR)                             TRIGDATA( )

----------------------------------------------------------------------------------
Queue Permissions 


    AMQ8864: Display authority record details.
   PROFILE(Q3)                             ENTITY(useradmin@DT-MachineName)
   ENTTYPE(PRINCIPAL)                      OBJTYPE(QUEUE)
   AUTHLIST(BROWSE,CHG,CLR,DLT,DSP,GET,INQ,PUT,PASSALL,PASSID,SET,SETALL,SETID)
AMQ8864: Display authority record details.
   PROFILE(Q3)                             ENTITY(mqm@DT-MachineName)
   ENTTYPE(GROUP)                          OBJTYPE(QUEUE)
   AUTHLIST(BROWSE,CHG,CLR,DLT,DSP,GET,INQ,PUT,PASSALL,PASSID,SET,SETALL,SETID)
AMQ8864: Display authority record details.
   PROFILE(Q3)                             ENTITY(user@domainName)
   ENTTYPE(PRINCIPAL)                      OBJTYPE(QUEUE)
   AUTHLIST(BROWSE,CHG,CLR,DLT,DSP,GET,INQ,PUT,PASSALL,PASSID,SET,SETALL,SETID)
AMQ8864: Display authority record details.
   PROFILE(Q3)                             ENTITY(user2@domainName)
   ENTTYPE(PRINCIPAL)                      OBJTYPE(QUEUE)
   AUTHLIST(BROWSE,CHG,CLR,DLT,DSP,GET,INQ,PUT,PASSALL,PASSID,SET,SETALL,SETID)

AMQ8864: Display authority record details.
   PROFILE(ORANGE.LOCAL.QUEUE)             ENTITY(useradmin@DT-MachineName)
   ENTTYPE(PRINCIPAL)                      OBJTYPE(QUEUE)
   AUTHLIST(BROWSE,CHG,CLR,DLT,DSP,GET,INQ,PUT,PASSALL,PASSID,SET,SETALL,SETID)
AMQ8864: Display authority record details.
   PROFILE(ORANGE.LOCAL.QUEUE)             ENTITY(mqm@DT-MachineName)
   ENTTYPE(GROUP)                          OBJTYPE(QUEUE)
   AUTHLIST(BROWSE,CHG,CLR,DLT,DSP,GET,INQ,PUT,PASSALL,PASSID,SET,SETALL,SETID)


-----------------------------------------------------------------------------
Queue Manager Permissions

   AMQ8864: Display authority record details.
   PROFILE(SELF)                           ENTITY(user@domainName)
   ENTTYPE(PRINCIPAL)                      OBJTYPE(QMGR)
   AUTHLIST(ALTUSR,CHG,CONNECT,DLT,DSP,INQ,SET,SETALL,SETID,SYSTEM)
AMQ8864: Display authority record details.
   PROFILE(@CLASS)                         ENTITY(user@domainName)
   ENTTYPE(PRINCIPAL)                      OBJTYPE(QMGR)
   AUTHLIST(NONE)

-------------------------------------------------------------------------------
 **The Following error is seen the AMQERR01.LOG**

    14-03-2020 00:18:01 - Process(7752.172) User(MUSR_MQADMIN) Program(amqzlaa0.exe)
                      Host(DT-MachineName) Installation(Installation1)
                      VRMF(7.5.0.2) QMgr(QM1)

AMQ8077: Entity 'user@domainNname' has insufficient authority to access object
'ORANGE.LOCAL.QUEUE'.

EXPLANATION:
The specified entity is not authorized to access the required object. The
following requested permissions are unauthorized: put/passall
ACTION:
Ensure that the correct level of authority has been set for this entity against
the required object, or ensure that the entity is a member of a privileged
group. 
----- amqzfubn.c : 515 --------------------------------------------------------
14-03-2020 00:18:01 - Process(7752.172) User(MUSR_MQADMIN) Program(amqzlaa0.exe)
                      Host(DT-MachineName) Installation(Installation1)
                      VRMF(7.5.0.2) QMgr(QM1)

AMQ8077: Entity 'user@domainNname' has insufficient authority to access object
'DLQ'.

EXPLANATION:
The specified entity is not authorized to access the required object. The
following requested permissions are unauthorized: put/passall
ACTION:
Ensure that the correct level of authority has been set for this entity against
the required object, or ensure that the entity is a member of a privileged
group. 

【问题讨论】:

  • 如果您可以发布队列属性会有所帮助。使用 DIS QL() runmqsc 命令转储属性。
  • @Shashi 添加队列属性。
  • BOQNAME 和 BOTHRESH 属性看起来不错。 MQ 7.5 不受支持。我的建议是尝试使用最新的 MQ v8/v9 修复包。您可以先尝试仅更新 MQ 客户端,
  • 另一件事:BOQNAME 和 BOTHRESH 信息由 IBM MQ JMS 类缓存。如果您更改队列属性,则必须重新启动 JMS 应用程序。
  • 重新发送请回复您错过的内容。用户是否对 队列管理器 和回退队列具有 PASSALL 权限? 检查队列管理器 AMKERR01.LOG 是否有与权限相关的错误。

标签: ibm-mq spring-jms


【解决方案1】:

您从队列管理器的AMQERR01.LOG 中提供的关键错误如下:

AMQ8077: Entity 'user@domainNname' has insufficient authority to access object
'ORANGE.LOCAL.QUEUE'.

EXPLANATION:
The specified entity is not authorized to access the required object. The
following requested permissions are unauthorized: put/passall

根据提供的错误,尝试访问退出队列的用户是user@domainNname

从提供的所有信息来看,user@domainNname 似乎只是缺少对ORANGE.LOCAL.QUEUE 的权限,以下命令应添加所需权限:

SET AUTHREC PROFILE(ORANGE.LOCAL.QUEUE) OBJTYPE(QUEUE) PRINCIPAL('user@domainNname') AUTHADD(PUT,PASSALL)

请注意,如果由于权限错误等任何原因无法打开或放入此队列,则 JMS 中的退出队列处理将首先尝试将指定的BOQNAME 用于正在从中消费的队列,或者队列已满,然后它会尝试放入队列管理器的死信队列。这就是为什么您还会在日志中看到一条错误消息,指出 insufficient authority to access object 'DLQ'

【讨论】:

  • 成功了!!非常感谢。虽然我确实有一个问题。我在哪里可以得到更多这样的 Websphere MQ 故障排除。我所能找到的只是官方文档,它没有任何故障排除参考。但这确实是很好的帮助。再次感谢。
  • 我确实删除了对队列管理器的PASSALL 的引用,这实际上不是队列管理器的有效权限。还有另一个队列级别权限SETALL,它确实需要队列管理器上的相同SETALL 权限,PASSALL 但是仅在队列级别有效,在队列管理器上不需要或在队列管理器上有效。跨度>
  • 对我来说关键是看你的错误日志。该错误准确地说明了问题AMQ8077: Entity 'user@domainNname' has insufficient authority to access object 'ORANGE.LOCAL.QUEUE'. The following requested permissions are unauthorized: put/passall。另请注意,JMS Backout 处理的工作方式是,它将首先尝试放入您正在消费的队列中指定的BOQNAME。如果由于任何原因无法打开此队列,他们将尝试使用队列管理器死信队列,可以使用DIS QMGR DEADQ 查看,在您的情况下为DLQ
  • 是的,日志是这里的关键。第一次在这个 MQ 上工作。以为一旦我在 MQ 上配置了 BO 队列,它就可以工作了。我在想我错过了什么。感谢您指出日志文件。
  • @frewper - 使用 MQ 进行故障排除的第一个调用端口始终是 AMKERR01.LOG。然后,这将为您提供一个错误消息编号,以便您在知识中心中查找(并且对该编号进行常规网络搜索通常也很有帮助)。