1
votes

I have DMLC listener that listens to messages from Websphere MQ 7.5.0.2. When there is a poison message, i wish to put it in the back-out Q after the retry count in MQ expires.

I have configured the back-out queue on the MQ, with the threshold value at 3.

However, what actually happens wen i throw an exception on the listener, the message is still being redelivered way more than 3 times and the the message goes back to the same queue every time and the cycle is repeated continuously. The back-out threshold increases in MQ, but never the message never goes to the back-out Queue.

Am i missing something somewhere?What should i do if i want the message to be put in the back-out Queue. Referring to the official docs below, there isn't any additional configuration for this.

Websphere Poison Message Handling

Is there any additional configurations that I need to do ?

Queue Details

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. 
1
It would help if you can post the queue attributes. Use DIS QL(<your queue>) runmqsc command to dump the attributes.Shashi
@Shashi Added Queue Attributes.frewper
BOQNAME and BOTHRESH Attributes look fine. MQ 7.5 is out of support. My suggestion would be try with latest fix pack of MQ v8/v9. You can try first by updating the MQ client only,Shashi
Another thing: The BOQNAME and BOTHRESH information is cached by the IBM MQ JMS classes. In case you change the queue attributes you have to restart your JMS application.Daniel Steinmann
Resending please respond to what you missed. Does the user have PASSALL permission to the queue manager and backout queue? Check the queue manager AMQERR01.LOG for an error related to permissions.JoshMc

1 Answers

3
votes

The key error you have provided from the queue manager's AMQERR01.LOG is below:

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

Based on the error provided, the user which is attempting to access the back out queue is user@domainNname.

From all of the information provided it appears that user@domainNname is only missing permissions to ORANGE.LOCAL.QUEUE, the following command should add the require permissions:

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

Note that back out queue processing in JMS will first attempt to use the specified BOQNAME for the queue that is being consumed from, if it is unable to open or put to this queue for any reason such as permission error, or queue full, it will then attempt to put to the queue manager's dead letter queue. This is why you also see an error in your logs stating insufficient authority to access object 'DLQ'.