Author |
Message
|
andrewhirst |
Posted: Wed Oct 20, 2004 7:32 am Post subject: Peculiar Problem |
|
|
 Apprentice
Joined: 06 Jul 2004 Posts: 33 Location: UK
|
Hi,
This one has me stumped!
We have an MQ cluster consisting of a development PC (Webspere Application Dev on Win2K), a WMQI broker (Solaris) and a gateway (Solaris). The gateway box is intended to enable a remote 3rd party box (Win2K not in the cluster) to post replies in response to requests made by the dev PC. The requests get out, via the broker, OK and the app on the 3rd party box replies, but once the messages reach the gateway box, they are sent to the DLQ on the gateway box.
The DL header reports the error as 2085, i.e. unknown object. However, by logging on to the gateway box I can post to the queue in question without problem. The queue in question is defined as an alias queue on the broker that points to a local queue also on the broker.
The remote message is posted with the user mqm. I use the same username when I post a message directly from the gateway.
Error Log
----- amqrmrca.c : 1318 -------------------------------------------------------
10/20/04 04:30:34 PM
AMQ9544: Messages not put to destination queue.
EXPLANATION:
During the processing of channel 'NVISRP01.QSXGWP01' one or more messages could
not be put to the destination queue and attempts were made to put them to a
dead-letter queue. The location of the queue is 1, where 1 is the local
dead-letter queue and 2 is the remote dead-letter queue.
ACTION:
Examine the contents of the dead-letter queue. Each message is contained in a
structure that describes why the message was put to the queue, and to where it
was originally addressed. Also look at previous error messages to see if the
attempt to put messages to a dead-letter queue failed. The program identifier
(PID) of the processing program was '1183'.
Process 1183 is amqcrsta -m QSXGWP01
Any help gratefuly received.
Andrew.[/i] _________________ Andrew Hirst |
|
Back to top |
|
 |
PeterPotkay |
Posted: Wed Oct 20, 2004 9:02 am Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
Way more info is needed to help. What are the queue defs/names and QM names in this scenario? _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
RogerLacroix |
Posted: Wed Oct 20, 2004 9:25 am Post subject: |
|
|
 Jedi Knight
Joined: 15 May 2001 Posts: 3264 Location: London, ON Canada
|
Hi,
RC=2085 in the DLH can be 1 of 2 causes:
(1) Unknown queue name (but you say it is there)
(2) Unknown queue manager name.
Check the QMgrName in the DLH and make sure it is either (1) same as the local queue manager or (2) It matches a QMgr Alias definition or (3) That there is a matching XMITQ of the same name.
Regards,
Roger Lacroix _________________ Capitalware: Transforming tomorrow into today.
Connected to MQ!
Twitter |
|
Back to top |
|
 |
Nigelg |
Posted: Wed Oct 20, 2004 11:53 pm Post subject: |
|
|
Grand Master
Joined: 02 Aug 2004 Posts: 1046
|
I suspect that the destination qmgr in the reply msg is the gateway qmgr. and not the broker qmgr where the queue actually exists. The 2085 is returned because the dest queue does not exist on the gateway.
Roger's answer 2 above is correct, but it applies more to distributed queueing, not clustering.
1 above is not right; if you set the qmgr in the OD when posting to a cluster queue it has to be the qmgr that hosts the cluster queue, not the local qmgr.
3 is not right either; clusters do not use xmitqs other than the cluster xmitq.
Define a qmgr alias on the gateway, shared in the cluster, with a blank RQMNAME. Set the ReplyToQMgr in the MD of the original msg to this qmgr alias. The effect of this is that the qmgr alias is resolved to a blank qmgr name, which allows the normal cluster processing to find the host qmgr of the ReplyToQ. This technique is described in the Clusters manual.
For these sort of problems, study table 3 in the APG, Resolving queue names when using MQOPEN. |
|
Back to top |
|
 |
andrewhirst |
Posted: Wed Oct 20, 2004 11:53 pm Post subject: |
|
|
 Apprentice
Joined: 06 Jul 2004 Posts: 33 Location: UK
|
Hi,
Here are the MQ definitions:
Gateway QMgr:
Code: |
* Cluster Receiver Channel for CGBD1
* ----------------------------------
define channel (CGBD1.QSXGWP01) +
chltype (CLUSRCVR) +
trptype (TCP) +
conname ('GATEWAY(1414)') +
cluster (CGBD1) +
descr ('Cluster-receiver channel for Cluster CGBD1.') +
replace
* Cluster Sender Channel for CGBD1
* Broker1 is a full repository
* --------------------------------
define channel (CGBD1.QSMQID01) +
chltype (CLUSSDR) +
trptype (TCP) +
conname ('BROKER1(1414)') +
cluster (CGBD1) +
descr ('Cluster-sender channel to the broker.') +
replace
* Define Processes
DEFINE PROCESS(START_CH) +
USERDATA('QSXGWP01.NVISRP01') +
REPLACE
* Define transmission queue to remote server
DEFINE QLOCAL(NVISRP01) +
DESCR('Transmission queue from QSXGWP01 to remote') +
USAGE(XMITQ) +
DEFPSIST(YES) +
MAXMSGL(50000) +
MAXDEPTH(200) +
TRIGGER +
INITQ('SYSTEM.CHANNEL.INITQ') +
PROCESS(START_CH) +
REPLACE
* Channel definitions
DEFINE CHANNEL('QSXGWP01.NVISRP01') +
CHLTYPE(SDR) +
DESCR('Sender Channel to remote server') +
CONNAME('REMOTE(1414)') +
TRPTYPE(TCP) +
XMITQ(NVISRP01) +
DISCINT(0) +
MAXMSGL(50000) +
REPLACE
DEFINE CHANNEL('NVISRP01.QSXGWP01') +
CHLTYPE(RCVR) +
DESCR('Receiver Channel from remote server to gateway box') +
TRPTYPE(TCP) +
MAXMSGL(50000) +
REPLACE
|
Remote Server QMgr
Code: |
* Define transmission queue
DEFINE QLOCAL(QSXGWP01) +
USAGE(XMITQ) +
DEFPSIST(YES) +
MAXMSGL(50000) +
MAXDEPTH(200) +
TRIGGER +
INITQ('SYSTEM.CHANNEL.INITQ') +
PROCESS(START_CH) +
REPLACE
* Define Processes
DEFINE PROCESS(START_CH) +
USERDATA('NVISRP01.QSXGWP01') +
REPLACE
* Channel definitions
DEFINE CHANNEL('NVISRP01.QSXGWP01') +
CHLTYPE(SDR) +
CONNAME('GATEWAY(1414)') +
TRPTYPE(TCP) +
XMITQ(QSXGWP01) +
DISCINT(0) +
MAXMSGL(50000) +
REPLACE
DEFINE CHANNEL('QSXGWP01.NVISRP01') +
CHLTYPE(RCVR) +
TRPTYPE(TCP) +
MAXMSGL(50000) +
REPLACE
* Define remote queue. Remote Q is located on Broker2
DEFINE QREMOTE(Q.ISR.VEHICLE.DETAILS.REPLY) +
DEFPSIST(YES) +
RNAME('Q.NAV.VEH.DET.REPLY') +
RQMNAME('QSXGWP01') +
XMITQ('QSXGWP01') +
REPLACE
|
Broker2
Code: |
* Cluster Receiver Channel for CGBD1
* ----------------------------------
define channel (CGBD1.QSMQID02) +
chltype (CLUSRCVR) +
trptype(TCP) +
conname ('BROKER2(1415)') +
cluster (CGBD1) +
descr('Cluster-receiver channel for CGBD1') +
maxmsgl (104857600) +
replace
* Cluster Sender Channel for CGBD1
* --------------------------------
define channel (CGBD1.QSMQID01) +
chltype (CLUSSDR) +
trptype(TCP) +
conname ('BROKER1(1414)') +
cluster (CGBD1) +
descr ('Cluster-sender channel to repository ') +
maxmsgl (104857600) +
replace
* will be used on the return message path.
define ql(Q.HUBGB.ISR.VEH.DET.RPLY) +
descr ('Q for incoming vehicle details msg.') +
maxmsgl (50000) +
defpsist (NO) +
cluster (CGBD1) +
maxdepth (200) +
noshare +
replace
* Define alias queue for navigator's reply message. TARGQ is in CGBD1 cluster.
define qa(Q.NAV.VEH.DET.REPLY) +
targq (Q.HUBGB.VEH.DET.RPLY) +
descr ('Remote queue for messages.') +
defpsist (YES) +
cluster (CGBD1) +
defbind (NOTFIXED) +
replace
|
As you can see, the gateway box has no local queue defs, but relies upon an alias (Q.NAV.VEH.DET.REPLY) on Broker2 to a local queue (Q.HUBGB.VEH.DET.RPLY)also on Broker 2. I can post messages from the gateway to the alias, but the remote application can not.
Could the underlying problem be access rights? I have created a profile for the remote user and added it to the mqm group on the gateway box and Broker2, without any improvement. However, when I logged on to the gateway using the new profile I could not send messages to the Q.NAV.VEH.DET.REPLY queue, nor could I post to a local test queue. Error returned was RC2035.... MQRC_NOT_AUTHORIZED. So I asked the remote app to send messages using the user set to mqm. No improvement.
TIA _________________ Andrew Hirst |
|
Back to top |
|
 |
Nigelg |
Posted: Wed Oct 20, 2004 11:57 pm Post subject: |
|
|
Grand Master
Joined: 02 Aug 2004 Posts: 1046
|
Did you see my answer above the definitions? Out posts have the same time! |
|
Back to top |
|
 |
Nigelg |
Posted: Thu Oct 21, 2004 1:16 am Post subject: |
|
|
Grand Master
Joined: 02 Aug 2004 Posts: 1046
|
In case anybody was wondering where amqcrsta gets the qmgr name from to put in the OD...
The qmgr name in the OD is the qmgr name from the XQH.
The qmgr name in the XQH is the name of the qmgr in the remote queue definition on the qmgr where the msg was put. |
|
Back to top |
|
 |
andrewhirst |
Posted: Thu Oct 21, 2004 2:31 am Post subject: |
|
|
 Apprentice
Joined: 06 Jul 2004 Posts: 33 Location: UK
|
So, how does this look?:
Gateway QMgr
Code: |
DEFINE QREMOTE('A.GATEWAY') RNAME('') RQMNAME('')
|
Remote QMgr:
Code: |
DEFINE QREMOTE(Q.ISR.VEHICLE.DETAILS.REPLY) +
RNAME('Q.NAV.VEH.DET.RPLY') +
RQMNAME('A.GATEWAY') +
XMITQ('QSXGWP01')
|
The original app (a message flow in a broker) sets ReplyToQMgr in the MQMD to A.GATEWAY.
The remote app will also need to change the way that it works and extract the ReplyToQMgr from the MQMD _________________ Andrew Hirst |
|
Back to top |
|
 |
|