Author |
Message
|
jeevan |
Posted: Thu Sep 03, 2009 3:40 pm Post subject: Load balancing messages received from outside the cluster |
|
|
Grand Master
Joined: 12 Nov 2005 Posts: 1432
|
I need to load balance message arriving to a cluster queue maanger from outside of the cluster. There are two queue managers and both of the queue managers, the one which is receiving the message and other, have the queue instance.
Is it doable?
I searched and found only the follwoing link which tell me that I can not have an instance of the queue in the receiving queue maanger.
http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic=/com.ibm.mq.csqzah.doc/qc10790_.htm
Last edited by jeevan on Tue Jul 06, 2010 4:06 pm; edited 1 time in total |
|
Back to top |
|
 |
bruce2359 |
Posted: Thu Sep 03, 2009 3:53 pm Post subject: |
|
|
 Poobah
Joined: 05 Jan 2008 Posts: 9469 Location: US: west coast, almost. Otherwise, enroute.
|
Quote: |
I searched and found only the follwoing link which tell me that I can not have an instance of the queue in the receiving queue maanger. |
You didn't read far enough.
This is pasted from the reference you cited:
To take advantage of the default workload balancing mechanism, one of the following must apply:
-The gateway queue manager must not contain an instance of the EDINBURGH queue.
-The gateway queue manager specifies CLWLUSEQ(ANY) on ALTER QMGR.
-The EDINBURGH queue on the gateway queue manager specifies CLWLUSEQ(ANY).
What this means is that one, some or all, must be true. _________________ I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live. |
|
Back to top |
|
 |
exerk |
Posted: Thu Sep 03, 2009 4:06 pm Post subject: |
|
|
 Jedi Council
Joined: 02 Nov 2006 Posts: 6339
|
And it's contradictory:
Quote: |
The gateway queue manager must not contain an instance of the EDINBURGH queue.
The gateway queue manager specifies CLWLUSEQ(ANY) on ALTER QMGR.
The EDINBURGH queue on the gateway queue manager specifies CLWLUSEQ(ANY). |
Prior to V6.0, a cluster queue manager alias (an 'empty' QR, i.e. no RNAME, RQMNAME and XMITQ specified) was required in the Gateway queue manager, which could not host any instances of a queue declared to the cluster. With the advent of V6.0, provided a message arrives at the Gateway queue manager within the cluster over a non-cluster channel, or is put locally and the CLWLUSEQ attributes on the queue/queue manager are correctly specified, the queue manager will load balance across the cluster to other instances of the queue.
THIS also 'contradicts' the URL you posted, so I'm not surprised you are confused.
Bear in mind one aspect about Gateways into clusters if using V6.0 or V7.0: Although any of the queue managers could potentially be used, a Gateway should always be highly-available, therefore using one of the 'processing' queue managers may not be appropriate, whereas configuring an HA queue manager that just works as a router may be.
EDIT after seeing bruce2359's post: I still think that part of the manual is poorly written, and open to misinterpretation. _________________ It's puzzling, I don't think I've ever seen anything quite like this before...and it's hard to soar like an eagle when you're surrounded by turkeys. |
|
Back to top |
|
 |
exerk |
Posted: Thu Sep 03, 2009 4:11 pm Post subject: |
|
|
 Jedi Council
Joined: 02 Nov 2006 Posts: 6339
|
Moving the post to the Clusters forum as it's more appropriate... _________________ It's puzzling, I don't think I've ever seen anything quite like this before...and it's hard to soar like an eagle when you're surrounded by turkeys. |
|
Back to top |
|
 |
bruce2359 |
Posted: Thu Sep 03, 2009 4:19 pm Post subject: |
|
|
 Poobah
Joined: 05 Jan 2008 Posts: 9469 Location: US: west coast, almost. Otherwise, enroute.
|
Quote: |
EDIT after seeing bruce2359's post: I still think that part of the manual is poorly written, and open to misinterpretation. |
Clearly, the reference is unclear. The author could have added and/or to make it somewhat easier to understand. _________________ I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live. |
|
Back to top |
|
 |
jeevan |
Posted: Thu Sep 03, 2009 6:20 pm Post subject: |
|
|
Grand Master
Joined: 12 Nov 2005 Posts: 1432
|
bruce2359 wrote: |
Quote: |
EDIT after seeing bruce2359's post: I still think that part of the manual is poorly written, and open to misinterpretation. |
Clearly, the reference is unclear. The author could have added and/or to make it somewhat easier to understand. |
Definitely confusing. I am still confused. In fact, I already created the qmgr alias too and have both 2 and 3 steps done.
I DELETED the qmgr alias, revoked step 3. So, I only have step 2 done.
The clwsuseq parameter of the queue is left as default- queue manaer.
1. The gateway queue manager must not contain an instance of the EDINBURGH queue.
2. The gateway queue manager specifies CLWLUSEQ(ANY) on ALTER QMGR.
4, The EDINBURGH queue on the gateway queue manager specifies CLWLUSEQ(ANY)
However, it is not working. All the messages are going to qmgr 1. |
|
Back to top |
|
 |
bruce2359 |
Posted: Thu Sep 03, 2009 6:28 pm Post subject: |
|
|
 Poobah
Joined: 05 Jan 2008 Posts: 9469 Location: US: west coast, almost. Otherwise, enroute.
|
Quote: |
However, it is not working. All the messages are going to qmgr 1. |
Is qmgr1 the gateway qmgr? If so, is there a local instance of the destination queue on qmgr1? If so, you have violated rule #1.
Some other things: is the gateway qmgr in the cluster? is there qlocal definition in the cluster? _________________ I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live. |
|
Back to top |
|
 |
jeevan |
Posted: Thu Sep 03, 2009 7:56 pm Post subject: |
|
|
Grand Master
Joined: 12 Nov 2005 Posts: 1432
|
bruce2359 wrote: |
Quote: |
However, it is not working. All the messages are going to qmgr 1. |
Is qmgr1 the gateway qmgr? If so, is there a local instance of the destination queue on qmgr1? If so, you have violated rule #1.
Some other things: is the gateway qmgr in the cluster? is there qlocal definition in the cluster? |
That is what my initial post is. I said the doc says that I can not have local instance of the queue in the gateway gmgq(lets say qmgr1). But my requirement is I have to have the instance of the queue on both.
in your first reply you said,
What this means is that one, some or all, must be true.
one if not true but boht other are true.
I am still not sure whether this can be done or not. My requirement, I am repeating again, is to have the instance of the queu in both queue manager ( gateway and the other). |
|
Back to top |
|
 |
bruce2359 |
Posted: Thu Sep 03, 2009 10:04 pm Post subject: |
|
|
 Poobah
Joined: 05 Jan 2008 Posts: 9469 Location: US: west coast, almost. Otherwise, enroute.
|
EDIT
Please:
On your gateway qmgr specify CLWLUSEQ(ANY). Display the gateway QMGR object and post it here.
Your gateway local cluster queue definition must specify CLWLUSEQ(QMGR or ANY). Display your gateway qmgr qlocal definition and post it here.
Display your other qmgr (non-gateway) cluster qlocal definition and post it here. _________________ I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live. |
|
Back to top |
|
 |
PeterPotkay |
Posted: Fri Sep 04, 2009 4:46 am Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
The app or remote queue definition outside of the cluster is probably specifically addressing the message to your gateway QM. So regardless of the CLWLUSEQ attribute of that queue on the Gateway QM, you are telling MQ to deliver it to only that QM.
The destination QM should be the name of the cluster, and on the gateway QM you need a QM Alias that blanks out the destination QM so that the cluster is free to look for instances of the queue. And then CLWLUSEQ will come into play. _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Sep 04, 2009 5:45 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
That's the way to do it. Follow Peter's advice to the letter.  _________________ MQ & Broker admin |
|
Back to top |
|
 |
jeevan |
Posted: Fri Sep 04, 2009 8:22 am Post subject: |
|
|
Grand Master
Joined: 12 Nov 2005 Posts: 1432
|
PeterPotkay wrote: |
The app or remote queue definition outside of the cluster is probably specifically addressing the message to your gateway QM. So regardless of the CLWLUSEQ attribute of that queue on the Gateway QM, you are telling MQ to deliver it to only that QM.
The destination QM should be the name of the cluster, and on the gateway QM you need a QM Alias that blanks out the destination QM so that the cluster is free to look for instances of the queue. And then CLWLUSEQ will come into play. |
Peter,
Thanks a lot. The following is my mq setup.
non cluster qmgr
Name: TESTQMGR
Remoteq: SC_REMOTE ( maps to SC.REQ)
the remote queue manager : SC_CLUSTER
XMITQ: SC1
CLUSTER QMGR
1. QMGR1(GATEWAY QMGR)
NAME: SC1
REPOSITORY NAME: SC.CLUSTER
has a cluster receiver channel TO.SC1
QCLUSTER: SC.REQ
QMGR ALIAS: SC1
[DEFINE QREMOTE(SC1) RNAME(' ') RQMNAME('')]
The CLWLUSEQ1 parameter of both cluster queue SC_CLUSTER and qmgr itself has set to "ANY"
1. QMGR2
NAME: SC2
has a cluster receiver and sender channel TO.SC2, TO.SC1
QCLUSTER: SC.REQ
QUESTIONS:
AMQSPUT SC.REMOTE TESTQMGR
The messages are going to DLQ
Could you please advise me what did I do wrong
Thanks |
|
Back to top |
|
 |
bruce2359 |
Posted: Fri Sep 04, 2009 8:31 am Post subject: |
|
|
 Poobah
Joined: 05 Jan 2008 Posts: 9469 Location: US: west coast, almost. Otherwise, enroute.
|
It would help a bunch if you would post entire object definitions.
Which DLQ on which qmgr? What is the reasoncode in the dead-letter header? What are the qname and qmgrname in the DLH? _________________ I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live. |
|
Back to top |
|
 |
jeevan |
Posted: Fri Sep 04, 2009 8:57 am Post subject: |
|
|
Grand Master
Joined: 12 Nov 2005 Posts: 1432
|
bruce2359 wrote: |
It would help a bunch if you would post entire object definitions.
Which DLQ on which qmgr? What is the reasoncode in the dead-letter header? What are the qname and qmgrname in the DLH? |
Here is the complete def of mq objects
**********************************
* >> TEST1
* Sender Channels
DEFINE CHANNEL('TEST1.TO.SC1') CHLTYPE(SDR) +
TRPTYPE(TCP) XMITQ('SC1') +
CONNAME('10.16.178.133(1416)') DESCR(' ') MCANAME(' ') +
BATCHSZ(50) BATCHINT(0) HBINT(300) +
DISCINT(6000) SHORTRTY(10) SHORTTMR(60) +
LONGRTY(999999999) LONGTMR(1200) SCYEXIT(' ') +
SCYDATA(' ') MSGEXIT(' ') MSGDATA(' ') +
SENDEXIT(' ') SENDDATA(' ') RCVEXIT(' ') +
RCVDATA(' ') SEQWRAP(999999999) MAXMSGL(4194304) +
CONVERT(NO) NPMSPEED(FAST) MCATYPE(PROCESS) +
MCAUSER(' ') USERID(' ') +
BATCHHB(0) KAINT(AUTO) LOCLADDR(' ') +
SSLCIPH(' ') SSLPEER(' ') REPLACE
* Alias Queues
DEFINE QALIAS('SC.REQ') +
DESCR(' ') TARGQ('SC.REMOTE') +
DEFPRTY(0) PUT(ENABLED) GET(ENABLED) +
DEFPSIST(NO) CLUSTER(' ') CLUSNL(' ') +
DEFBIND(OPEN) REPLACE
* Remote Queues
DEFINE QREMOTE('SC.REMOTE') +
DESCR(' ') RNAME('SC.REQ') +
RQMNAME('SC_CLUSTER') XMITQ('SC1') DEFPRTY(0) +
PUT(ENABLED) DEFPSIST(NO) CLUSTER(' ') +
CLUSNL(' ') DEFBIND(OPEN) REPLACE
* xmitq Queues
DEFINE QLOCAL('SC1') +
DESCR(' ') SHARE +
TRIGMPRI(0) TRIGDPTH(1) TRIGTYPE(FIRST) +
TRIGDATA('TEST1.TO.SC1') BOQNAME(' ') PROCESS(' ') +
DEFPRTY(0) MAXMSGL(4194304) BOTHRESH(0) +
TRIGGER DEFSOPT(SHARED) HARDENBO +
MSGDLVSQ(PRIORITY) PUT(ENABLED) GET(ENABLED) +
DEFPSIST(NO) USAGE(XMITQ) RETINTVL(999999999) +
MAXDEPTH(5000) QDEPTHLO(20) QDEPTHHI(80) +
QSVCINT(999999999) QSVCIEV(NONE) +
QDPMAXEV(ENABLED) INITQ('SYSTEM.CHANNEL.INITQ') QDPHIEV(DISABLED) +
QDPLOEV(DISABLED) CLUSTER(' ') CLUSNL(' ') +
DEFBIND(OPEN) REPLACE
*
*
********************************************************************************
* Queue Manager SC1
ALTER QMGR DESCR(' ') TRIGINT(999999999) +
DEADQ('SYSTEM.DEAD.LETTER.QUEUE') DEFXMITQ(' ') +
MAXHANDS(256) AUTHOREV(DISABLED) INHIBTEV(DISABLED) +
LOCALEV(DISABLED) REMOTEEV(DISABLED) STRSTPEV(ENABLED) +
PERFMEV(DISABLED) CCSID(437) MAXMSGL(4194304) +
CHADEV(DISABLED) CHAD(DISABLED) CHADEXIT(' ') +
MAXUMSGS(10000) REPOS('SC_CLUSTER') REPOSNL(' ') +
CLWLEXIT(' ') CLWLDATA(' ') CLWLLEN(100) +
CONFIGEV(DISABLED) SSLTASKS(0) SSLCRYP( ) +
SSLCRLNL(' ') SSLKEYR('D:\mqm\qmgrs\SC1\ssl\key') FORCE
* Receiver Channels
DEFINE CHANNEL('TEST1.TO.SC1') CHLTYPE(RCVR) +
TRPTYPE(TCP) DESCR(' ') +
BATCHSZ(50) HBINT(300) +
MRTMR(1000) MRRTY(10) SCYEXIT(' ') +
SCYDATA(' ') MSGEXIT(' ') MSGDATA(' ') +
SENDEXIT(' ') SENDDATA(' ') RCVEXIT(' ') +
RCVDATA(' ') PUTAUT(DEF) SEQWRAP(999999999) +
MAXMSGL(4194304) NPMSPEED(FAST) MCAUSER(' ') +
MREXIT(' ') MRDATA(' ') +
KAINT(AUTO) SSLCIPH(' ') SSLPEER(' ') +
SSLCAUTH(REQUIRED) REPLACE
* Cluster Receiver Channels
DEFINE CHANNEL('TO.SC1') CHLTYPE(CLUSRCVR) +
TRPTYPE(TCP) CONNAME('10.16.178.133(1416)') +
DESCR(' ') +
BATCHSZ(50) +
BATCHINT(0) HBINT(300) MRTMR(1000) +
MRRTY(10) DISCINT(6000) SHORTRTY(10) +
SHORTTMR(60) LONGRTY(999999999) LONGTMR(1200) +
SCYEXIT(' ') SCYDATA(' ') MSGEXIT(' ') +
MSGDATA(' ') SENDEXIT(' ') SENDDATA(' ') +
RCVEXIT(' ') RCVDATA(' ') PUTAUT(DEF) +
SEQWRAP(999999999) MAXMSGL(4194304) CONVERT(NO) +
NPMSPEED(FAST) MCATYPE(THREAD) MCAUSER(' ') +
MREXIT(' ') MRDATA(' ') CLUSTER('SC_CLUSTER') +
CLUSNL(' ') NETPRTY(0) BATCHHB(0) +
KAINT(AUTO) LOCLADDR(' ') SSLCIPH(' ') +
SSLPEER(' ') SSLCAUTH(REQUIRED) REPLACE
* Local Queues
DEFINE QLOCAL('SC.REQ') +
DESCR(' ') SHARE +
TRIGMPRI(0) TRIGDPTH(1) TRIGTYPE(FIRST) +
TRIGDATA(' ') BOQNAME(' ') PROCESS(' ') +
DEFPRTY(0) MAXMSGL(4194304) BOTHRESH(0) +
NOTRIGGER DEFSOPT(SHARED) HARDENBO +
MSGDLVSQ(PRIORITY) PUT(ENABLED) GET(ENABLED) +
DEFPSIST(NO) USAGE(NORMAL) RETINTVL(999999999) +
MAXDEPTH(5000) QDEPTHLO(20) QDEPTHHI(80) +
QSVCINT(999999999) QSVCIEV(NONE) +
QDPMAXEV(ENABLED) INITQ(' ') QDPHIEV(DISABLED) +
QDPLOEV(DISABLED) CLUSTER('SC_CLUSTER') CLUSNL(' ') +
DEFBIND(NOTFIXED) REPLACE
* Alias QMgrs
DEFINE QREMOTE('SC1') +
DESCR(' ') RNAME(' ') +
RQMNAME(' ') XMITQ(' ') DEFPRTY(0) +
PUT(ENABLED) DEFPSIST(NO) CLUSTER(' ') +
CLUSNL(' ') DEFBIND(OPEN) REPLACE
*****************************************************************************************************************************
* >> Queue Manager SC2
* Cluster Receiver Channels
DEFINE CHANNEL('TO.SC2') CHLTYPE(CLUSRCVR) +
TRPTYPE(TCP) CONNAME('10.16.178.133(1417)') +
DESCR(' ') +
BATCHSZ(50) +
BATCHINT(0) HBINT(300) MRTMR(1000) +
MRRTY(10) DISCINT(6000) SHORTRTY(10) +
SHORTTMR(60) LONGRTY(999999999) LONGTMR(1200) +
SCYEXIT(' ') SCYDATA(' ') MSGEXIT(' ') +
MSGDATA(' ') SENDEXIT(' ') SENDDATA(' ') +
RCVEXIT(' ') RCVDATA(' ') PUTAUT(DEF) +
SEQWRAP(999999999) MAXMSGL(4194304) CONVERT(NO) +
NPMSPEED(FAST) MCATYPE(THREAD) MCAUSER(' ') +
MREXIT(' ') MRDATA(' ') CLUSTER('SC_CLUSTER') +
CLUSNL(' ') NETPRTY(0) BATCHHB(0) +
KAINT(AUTO) LOCLADDR(' ') SSLCIPH(' ') +
SSLPEER(' ') SSLCAUTH(REQUIRED) REPLACE
* Cluster Sender Channels
DEFINE CHANNEL('TO.SC1') CHLTYPE(CLUSSDR) +
TRPTYPE(TCP) CONNAME('10.16.178.133(1416)') +
DESCR(' ') MCANAME(' ') +
BATCHSZ(50) +
BATCHINT(0) HBINT(300) DISCINT(6000) +
SHORTRTY(10) SHORTTMR(60) LONGRTY(999999999) +
LONGTMR(1200) SCYEXIT(' ') SCYDATA(' ') +
MSGEXIT(' ') MSGDATA(' ') SENDEXIT(' ') +
SENDDATA(' ') RCVEXIT(' ') RCVDATA(' ') +
SEQWRAP(999999999) MAXMSGL(4194304) CONVERT(NO) +
NPMSPEED(FAST) MCATYPE(THREAD) MCAUSER(' ') +
USERID(' ') CLUSTER('SC_CLUSTER') +
CLUSNL(' ') BATCHHB(0) KAINT(AUTO) +
LOCLADDR(' ') SSLCIPH(' ') SSLPEER(' ') +
REPLACE
* Local Queues
DEFINE QLOCAL('SC.REQ') +
DESCR(' ') SHARE +
TRIGMPRI(0) TRIGDPTH(1) TRIGTYPE(FIRST) +
TRIGDATA(' ') BOQNAME(' ') PROCESS(' ') +
DEFPRTY(0) MAXMSGL(4194304) BOTHRESH(0) +
NOTRIGGER DEFSOPT(SHARED) HARDENBO +
MSGDLVSQ(PRIORITY) PUT(ENABLED) GET(ENABLED) +
DEFPSIST(NO) USAGE(NORMAL) RETINTVL(999999999) +
MAXDEPTH(5000) QDEPTHLO(20) QDEPTHHI(80) +
QSVCINT(999999999) QSVCIEV(NONE) +
QDPMAXEV(ENABLED) INITQ(' ') QDPHIEV(DISABLED) +
QDPLOEV(DISABLED) CLUSTER('SC_CLUSTER') CLUSNL(' ') +
DEFBIND(NOTFIXED) REPLACE
Note: The messages are going to the DLQ of qmgr1 SC1. |
|
Back to top |
|
 |
bruce2359 |
Posted: Fri Sep 04, 2009 9:13 am Post subject: |
|
|
 Poobah
Joined: 05 Jan 2008 Posts: 9469 Location: US: west coast, almost. Otherwise, enroute.
|
Quote: |
Note: The messages are going to the DLQ of qmgr1 SC1. |
Look at the DeadLetterHeader of one of the messages in the DLQ.
What is the reasoncode?
What is the destination qmgr name?
What is the destination queue name? _________________ I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live. |
|
Back to top |
|
 |
|