Author |
Message
|
csmith28 |
Posted: Tue Dec 30, 2003 11:01 am Post subject: MQRC_MSG_TOO_BIG_FOR_Q,..... but it's really not |
|
|
 Grand Master
Joined: 15 Jul 2003 Posts: 1196 Location: Arizona
|
MQ5.3 CSD04
AIX5.1
Scenario: MQClient putting a 10meg message on to a remote MQManager via a QAlias that points to a Qlocal.
I have altered the MAXMSGL to MAXMSGL(12582912) 12meg on the qmgr and when I defined the queue that the message is to be place on I defined the MAXMSGL as 12meg as well but we continue to get code 2030 MQRC_MSG_TOO_BIG_FOR_Q when we try to put the message there. Note that previous to this the MAXMSGL for the qmgr was set to (4194304) 4meg an we can put 4meg messages to the local queue that has been defined for this but nothing larger.
$ echo "dis qmgr" | runmqsc
5724-B41 (C) Copyright IBM Corp. 1994, 2002. ALL RIGHTS RESERVED.
Starting MQSC for queue manager .
1 : dis qmgr
AMQ8408: Display Queue Manager details.
DESCR( ) DEADQ(SYSTEM.DEAD.LETTER.QUEUE)
DEFXMITQ( ) CHADEXIT( )
CLWLEXIT( ) CLWLDATA( )
REPOS( ) REPOSNL( )
SSLKEYR(/var/mqm/qmgrs/*****/ssl/key) SSLCRLNL( )
SSLCRYP( ) COMMANDQ(SYSTEM.ADMIN.COMMAND.QUEUE)
QMNAME(*****) CRDATE(2002-07-10)
CRTIME(20.17.2 ALTDATE(2003-12-1
ALTTIME(10.08.19) QMID(TAX06_2002-07-10_20.17.2
TRIGINT(999999999) MAXHANDS(256)
MAXUMSGS(10000) AUTHOREV(DISABLED)
INHIBTEV(DISABLED) LOCALEV(DISABLED)
REMOTEEV(DISABLED) PERFMEV(DISABLED)
STRSTPEV(ENABLED) CHAD(DISABLED)
CHADEV(DISABLED) CLWLLEN(100)
MAXMSGL(12582912) CCSID(819)
MAXPRTY(9) CMDLEVEL(530)
PLATFORM(UNIX) SYNCPT
DISTL(YES)
$ echo "dis ql (**.TEST.*****.****.***.**.QL01)" | runmqsc
5724-B41 (C) Copyright IBM Corp. 1994, 2002. ALL RIGHTS RESERVED.
Starting MQSC for queue manager .
1 : dis ql (**.TEST.*****.****.***.**.QL01)
AMQ8409: Display Queue details.
DESCR()
PROCESS( ) BOQNAME( )
INITQ( ) TRIGDATA( )
CLUSTER( ) CLUSNL( )
QUEUE(**.TEST.*****.****.***.**.QL01) CRDATE(2003-12-1
CRTIME(10.22.52) ALTDATE(2003-12-19)
ALTTIME(08.18.30) GET(ENABLED)
PUT(ENABLED) DEFPRTY(0)
DEFPSIST(YES) MAXDEPTH(20)
MAXMSGL(12582912) BOTHRESH(2)
SHARE DEFSOPT(SHARED)
HARDENBO MSGDLVSQ(PRIORITY)
RETINTVL(999999999) USAGE(NORMAL)
NOTRIGGER TRIGTYPE(NONE)
TRIGDPTH(1) TRIGMPRI(0)
QDEPTHHI(80) QDEPTHLO(20)
QDPMAXEV(ENABLED) QDPHIEV(DISABLED)
QDPLOEV(DISABLED) QSVCINT(999999999)
QSVCIEV(NONE) DISTL(NO)
DEFTYPE(PREDEFINED) TYPE(QLOCAL)
SCOPE(QMGR) DEFBIND(OPEN)
IPPROCS(0) OPPROCS(0)
CURDEPTH(0)
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.
Do I need to stop and restart the mqmgr so the alteration of the MAXMSGL on the qmgr itself will take affect?
I looked at the mqs.ini and the qm.ini for that mqmgr and didn't see any entries there that would be attributable to this.
Is there something else I missed? _________________ Yes, I am an agent of Satan but my duties are largely ceremonial. |
|
Back to top |
|
 |
Michael Dag |
Posted: Tue Dec 30, 2003 11:15 am Post subject: |
|
|
 Jedi Knight
Joined: 13 Jun 2002 Posts: 2607 Location: The Netherlands (Amsterdam)
|
You mention MQClient. Do you use the MQSERVER parameter or a Channel Table to connect... I recall a limitation of 4MEG on the MQSERVER.
Michael |
|
Back to top |
|
 |
csmith28 |
Posted: Tue Dec 30, 2003 11:24 am Post subject: Good Question..... |
|
|
 Grand Master
Joined: 15 Jul 2003 Posts: 1196 Location: Arizona
|
I don't work much with the Client Side but here is the Java Code they are trying to use:
String HOST = util.getValueNamed("HOST");
String CHANNEL = util.getValueNamed("CHANNEL");
String QMGR = util.getValueNamed("QUEUEMANAGER");
Int PORT = new Integer(util.getValueNamed("PORT")).intValue();
if (PORT == 0){
PORT=1414;
}
//Set up MQ Environment
MQEnvironment.hostname = HOST;
if (CHANNEL.length() > 0)
MQEnvironment.channel = CHANNEL;
MQEnvironment.port = PORT;
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES);
Try
{
public void putMessage(String putQueue, byte[] data) {
MQQueue localQ = null;
int openOptions = MQC.MQOO_OUTPUT;
try {
//Create the connection to the queue manager;
qMgr = new MQQueueManager(QMGR);
} catch(Throwable t){
System.out.println("Error connecting to Queue Manager: " + t.getMessage());
t.printStackTrace();
}
localQ = qMgr.accessQueue(putQueue, openOptions, null, null, null);
MQMessage message = new MQMessage();
message.expiry = MQC.MQEI_UNLIMITED;
message.persistence = MQC.MQPER_NOT_PERSISTENT;
message.messageId = MQC.MQMI_NONE;
message.write(data);
MQPutMessageOptions pmo = new MQPutMessageOptions();
localQ.put(message, pmo); // Exception thrown here with code 2030
} catch (MQException mqe) {
mqe.printStackTrace();
} finally {
try {
if(localQ != null) {
qMgr.commit();
localQ.close();
}
}
catch(Exception ex) {}
}
}
This is all greek to me...... or should I say Java to me.  _________________ Yes, I am an agent of Satan but my duties are largely ceremonial.
Last edited by csmith28 on Tue Dec 30, 2003 12:55 pm; edited 1 time in total |
|
Back to top |
|
 |
jefflowrey |
Posted: Tue Dec 30, 2003 11:25 am Post subject: Re: MQRC_MSG_TOO_BIG_FOR_Q,..... but it's really not |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
csmith28 wrote: |
Scenario: MQClient putting a 10meg message on to a remote MQManager via a QAlias that points to a Qlocal.
|
Do you know the mechanism that a client uses to connect to a Queue Manager? Do you know how the client functions?
The answers to those questions may have an impact on your problem.
csmith28 wrote: |
Do I need to stop and restart the mqmgr so the alteration of the MAXMSGL on the qmgr itself will take affect? |
I don't believe so. It appears this is automatic.
Quote: |
Is there something else I missed? |
Yes. The fact that you're connecting from a client, over a channel. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
csmith28 |
Posted: Tue Dec 30, 2003 12:58 pm Post subject: See mechanism above,...... |
|
|
 Grand Master
Joined: 15 Jul 2003 Posts: 1196 Location: Arizona
|
note I just tried changing the MAXMSGL of the SYSTEM.DEF.SVRCONN to 12 meg too and it still failed.
Like I said, I have very little experience working on the Client Side. _________________ Yes, I am an agent of Satan but my duties are largely ceremonial. |
|
Back to top |
|
 |
EddieA |
Posted: Tue Dec 30, 2003 1:13 pm Post subject: |
|
|
 Jedi
Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles
|
I don't know for sure, but I'm guessing that the Java client connection has the same restriction as connecting using the MQSERVER method. The channel is limited to 4Meg.
Cheers, _________________ Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
Prahasith |
Posted: Tue Dec 30, 2003 2:12 pm Post subject: |
|
|
 Disciple
Joined: 16 May 2003 Posts: 184 Location: Kansas City
|
If MQSERVER environment variable is used to define a client channel a maximum message length (MAXMSGL) of 4 MB is used, so larger messages cannot flow across this channel. For larger messages a client-connection channel must be defined using DEFINE CHANNEL, on the server, with MAXMSGL set to a larger figure.
1. Change MAXMSGL parameter of Queue Manger to bigger than 4MB.
2. Change MAXMSGL parameter of Queue to bigger than 4MB.
3. If you use MQ Client environment, you must change MAXMSGL parameter of Channel |
|
Back to top |
|
 |
EddieA |
Posted: Tue Dec 30, 2003 5:25 pm Post subject: |
|
|
 Jedi
Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles
|
The sample provided was written in Java. Neither of those methods of specifing the client connection are used.
Cheers, _________________ Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
csmith28 |
Posted: Wed Dec 31, 2003 8:39 am Post subject: |
|
|
 Grand Master
Joined: 15 Jul 2003 Posts: 1196 Location: Arizona
|
I'm not sure if it will help but I have increased the MAXMSGL for the SYSTEM.DEF.CLNTCONN and SYSTEM.DEF.SVRCONN to 12 meg. _________________ Yes, I am an agent of Satan but my duties are largely ceremonial. |
|
Back to top |
|
 |
PeterPotkay |
Posted: Wed Dec 31, 2003 2:47 pm Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
MQSERVER does not come into play for this application. It is coding its own connection info by building the MQEnvironment class.
Code: |
String CHANNEL = util.getValueNamed("CHANNEL");
|
This is what the Java client is asking for as far as the channel is concerned. This channel (a SVRCONN channel on the Queue Manager) needs to have its MAXMSGLENGTH altered. Any other channels have no effect on this problem.
What is the max message length for "CHANNEL"? _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
csmith28 |
Posted: Mon Jan 05, 2004 2:32 pm Post subject: |
|
|
 Grand Master
Joined: 15 Jul 2003 Posts: 1196 Location: Arizona
|
PeterPotkay wrote: |
MQSERVER does not come into play for this application. It is coding its own connection info by building the MQEnvironment class.
Code: |
String CHANNEL = util.getValueNamed("CHANNEL");
|
This is what the Java client is asking for as far as the channel is concerned. This channel (a SVRCONN channel on the Queue Manager) needs to have its MAXMSGLENGTH altered. Any other channels have no effect on this problem.
What is the max message length for "CHANNEL"? |
Indeed. I eventually came to the same conclution but the Java programer on the other side of this is clueless. The ball is in their court.
Thanks for all the help. _________________ Yes, I am an agent of Satan but my duties are largely ceremonial. |
|
Back to top |
|
 |
csmith28 |
Posted: Wed Jan 07, 2004 4:09 pm Post subject: Success |
|
|
 Grand Master
Joined: 15 Jul 2003 Posts: 1196 Location: Arizona
|
I found out late last week that the Developer was using his own W2k Desktop instead of my AIX Client Server. Looking at his java code I began to get bothered by the values he was entering as in:
String HOST = util.getValueNamed("HOST");
String CHANNEL = util.getValueNamed("CHANNEL");
String QMGR = util.getValueNamed("QUEUEMANAGER");
Int PORT = new Integer(util.getValueNamed("PORT")).intValue();
if (PORT == 0){
PORT=1414;
So instead I had him enter:
String HOST = util.getValueNamed("the DNS Name of the Server");
String CHANNEL = util.getValueNamed("SYSTEM.DEF.SVRCONN");
String QMGR = util.getValueNamed("The actual name of the MQManger");
Int PORT = new Integer(util.getValueNamed("PORT")).intValue();
if (PORT == 0){
PORT=1414;
Remember, earlier I changed the MAXMSGL on my SYSTEM.DEF.SVRCONN channel to 12meg.
It worked. I am guessing that the client while using String CHANNEL=CHANNEL default values because it wasn't being told specifically which channel it should use on the Client side even though the default is the SYSTEM.DEF.SVRCONN. So the client assumed it would be using a SYSTEM.DEF.SVRCONN with the default MAXMSGL of 4 meg.
One other change that I made was I changed the MAXMSGL on the SYSTEM.DEAD.LETTER.QUEUE to 12 meg as well.
Welp thanks for all the help. You guys did help me think this through. _________________ Yes, I am an agent of Satan but my duties are largely ceremonial. |
|
Back to top |
|
 |
|