|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
Remote messaging problem |
« View previous topic :: View next topic » |
Author |
Message
|
ktg |
Posted: Wed Mar 01, 2006 4:17 am Post subject: Remote messaging problem |
|
|
Centurion
Joined: 09 Jan 2006 Posts: 138 Location: India
|
I have 3 qmgrs with the following objects.
Code: |
Queue Manager A, dead letter queue DLQ:
QLOCAL(B) USAGE(XMITQ)
QLOCAL(APPQ)
QLOCAL(DLQ)
CHANNEL(A.B) CHLTYPE(SDR) XMITQ(B) CONNAME(B)
QREMOTE(C) XMITQ(B) RQMNAME(C)
QREMOTE(D) XMITQ(B) RQMNAME(D)
QREMOTE(F) RQMNAME(D) RNAME(APPQ) XMITQ(B)
QALIAS(E) TARGQ(F) |
Code: |
Queue Manager B, dead letter queue DLQ:
QLOCAL(C) USAGE(XMITQ)
QLOCAL(APPQ)
QLOCAL(DLQ)
CHANNEL(A.B) CHLTYPE(RCVR)
CHANNEL(B.C) CHLTYPE(SDR) XMITQ(C) CONNAME(C)
QREMOTE(D) XMITQ(C) |
Code: |
Queue Manager C, dead letter queue DLQ:
QLOCAL(APPQ)
QLOCAL(DLQ)
CHANNEL(B.C) CHLTYPE(RCVR)
QREMOTE(D) RQMNAME(C) |
(all the channels are running)
I wanted the messages which are put on queue E of A should reach APPLQ of C. But, I found out that the messages were going on APPLQ of B.
I then, solved the problem by doing
Code: |
echo alter qr(D) rqmname(c) | runmqsc B |
and now it is working as expected.
My doubt is why the messages were placing on APPQ of B(before altering qr(D)). As per my knowledge it should have gone to DLQ of B.
I read queue name resolution topic in APG and Intercommunication.
But, I could not find the reason( or I may not have understood)
Could anyone please help me...
thanks |
|
Back to top |
|
 |
Mr Butcher |
Posted: Wed Mar 01, 2006 6:03 am Post subject: |
|
|
 Padawan
Joined: 23 May 2005 Posts: 1716
|
why dlq? i think you overlooked one of the naming resolution rules in the apg....
the message put at queuemanager A hits queuemanager B with
TARGETQUEUE(APPQ) TARGETQUEUEMANAGER(D)
Now Queuemanager B is looking for something named "D" to route the message to, and the remotequeue "D" is found which is a queue manager alias because there is no remote queue name in there (the definition of the queue is QREMOTE(D) XMITQ(C)).
Now - according to the naming resolution written in the APG, the row " Queue manager alias definition (RemoteQMgrName may be the local queue manager)" is what you need (sorry, can not cut/paste in a readable format out of pdf). For Objectqueuemanager, the row reads:
Perform name resolution again with ObjectQMgrName set to RemoteQMgrName.
In your case you left the RemoteQmgrName blank in the queue manager alia, which means "local" Queuemanager when the naming resolution is performed again, so Queuemanager B puts the message to its own APPQ queue.
After your change, the naming resolution was performed again, but now the remote queuemanager in the queuemanager alias is "C" istead of blank, so now queuemanager B looks for something that is named "C" and finds the xmitq "C" and puts the message to that xmitq. now the message arrives in qmgr c and is put to queue APPQ. _________________ Regards, Butcher |
|
Back to top |
|
 |
ktg |
Posted: Thu Mar 02, 2006 1:10 am Post subject: |
|
|
Centurion
Joined: 09 Jan 2006 Posts: 138 Location: India
|
thanks for reply...... but, now I am totally confused.... will do some experiment myself and revert back...
Regards, |
|
Back to top |
|
 |
Mr Butcher |
Posted: Thu Mar 02, 2006 1:28 am Post subject: |
|
|
 Padawan
Joined: 23 May 2005 Posts: 1716
|
glad i was of help
what caused the confusion? in the first case, after all naming resolution was done, target queuemanager is "B", after the change target queuemanager is "C" _________________ Regards, Butcher |
|
Back to top |
|
 |
ktg |
Posted: Mon Mar 06, 2006 5:09 am Post subject: |
|
|
Centurion
Joined: 09 Jan 2006 Posts: 138 Location: India
|
Am very sorry for the delayed reply. Now, I feel I understood the concept from the replies, pdfs, experiments and came to the below conclusion. Please, let me know if I am wrong.
For messages with rqm name as queue name(MY.QUEUE)
1.
Queue name is MY.QUEUE,
RNAME is blank,
RQMNAME is blank,
XMITQ is blank
It is qmgr alias to itself
2.
Queue name is MY.QUEUE,
RNAME is blank,
RQMNAME is blank,
XMITQ is TRANMIT.Q
It is qmgr alias to itself (Message won't be put into xmit queue)
3.
Queue name is MY.QUEUE,
RNAME is blank,
RQMNAME is REMOTE.QMGR,
XMITQ is blank,
Qmgr alias to REMOTE.QMGR(Message will be put into xmit queue with the same name as REMOTE.QMGR. If there is no such xmit queue, message will be put into default xmit q. If default xmit q is not present, msg will be put into DLQ
4.
Queue name is MY.QUEUE,
RNAME is blank,
RQMNAME is REMOTE.QMGR,
XMITQ is TRANMIT.Q,
Qmgr alias to REMOTE.QMGR(Message will be put into xmit queue with the name TRANMIT.Q. If no such xmit queue is present, msg will be put in to dead letter queue)
5.If a message with RNAME as MY.QUEUE comes, it would be put in to DLQ
For messages with rname as QUEUE NAME(MY.QUEUE)
1.
Queue name is MY.QUEUE,
RNAME is REMOTE.QUEUE,
RQMNAME is blank,
XMITQ is blank
It would be put into dead letter queue
2.
Queue name is MY.QUEUE,
RNAME is REMOTE.QUEUE,
RQMNAME is blank,
XMITQ is TRANMIT.Q
It would be put into dead letter queue
3.
Queue name is MY.QUEUE
RNAME is REMOTE.QUEUE
RQMNAME is REMOTE.QMGR
XMITQ is (blank)
Message will be put in to xmit queue with the same name as REMOTE.QMGR. If there is no such xmit queue, message will be put into default xmit q. If default xmit q is not present, msg will be put into DLQ
4.
Queue name is MY.QUEUE
RNAME is REMOTE.QUEUE
RQMNAME is REMOTE.QMGR
XMITQ is TRANMIT.Q
Message will be put in to xmit queue with the name TRANMIT.Q If there is no such xmit queue, message will be put into DLQ
5.
If a message with RQMNAME as MY.QUEUE comes, it would be put in to DLQ
thanks, |
|
Back to top |
|
 |
Mr Butcher |
Posted: Mon Mar 06, 2006 5:18 am Post subject: |
|
|
 Padawan
Joined: 23 May 2005 Posts: 1716
|
sorry, too much to read for me now. why do you do that`? why do you write down what is already written in the manual? i will not verify if you copied the manuals correct.... thats waste of time. sorry. _________________ Regards, Butcher |
|
Back to top |
|
 |
ktg |
Posted: Mon Mar 06, 2006 5:33 am Post subject: |
|
|
Centurion
Joined: 09 Jan 2006 Posts: 138 Location: India
|
Butcher,
I didn't copy it from manuals. I read the docs...but felt that is difficult to understand and then with your reply, I managed to get some idea about it. And from that understanding I wrote all those.... so, Please, verify it only when you get time. I know, with just copy-pasting I won't achive any thing. One of my collegue was also finding it difficult to understand name resolution from the docs and she felt it is easier to understand from my tables. So, I posted it. but, am not sure whether my understanding is correct. (don't get angry with this long reply )
thanks |
|
Back to top |
|
 |
HubertKleinmanns |
Posted: Mon Mar 06, 2006 11:57 pm Post subject: |
|
|
 Shaman
Joined: 24 Feb 2004 Posts: 732 Location: Germany
|
Alpan,
when you leave the attribute RNAME blank, you have a QMgr alias. This means, you should write:
Quote: |
Queue name is MY.QUEUEMANAGER |
in your sample, you wrote for QMgr B:
Quote: |
QREMOTE(D) XMITQ(C) |
This means, you left the attribute RQMNAME blank. Then MQ resolves this blank name first to the local QMgr before it puts the message to the XmitQ. After this resolving, MQ detects, that the message is addressed (know) to the local QMgr. Then MQ resolves to a local target queue and again does not put to the XmitQ, but to the local Q in the Xmit header.
I myself read Butchers description several times, until I understood it, but his explanation is completely right. _________________ Regards
Hubert |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|