我試圖從使用ANSI-C和MQGET函數的隊列中接收消息。問題是我總是得到錯誤2010(MQRC_DATA_LENGTH_ERROR)。來自隊列的MQGET大消息(> 4MB)導致錯誤2010
我發現這個錯誤涉及MQGET調用(DataLength)的參數7。我的隊列中的消息有7157460個字節。我用於MQGET的通道將「最大消息長度」設置爲104857600(以及包含消息的隊列)。
我即使使用MQGET從這個例子: http://www.capitalware.biz/dl/code/c/msg2file.zip
我仍然結束了2010年的錯誤我在做什麼錯?我應該以某種方式增加MQSERVER環境變量中消息的最大大小?
MQGET調用:
/* ... */
MQLONG messlen; /* message length received */
MQGET(Hcon, /* connection handle */
Hobj, /* object handle */
&md, /* message descriptor */
&gmo, /* get message options */
buflen, /* pBuffer length */
pBuffer, /* pointer to message buffer */
&messlen, /* message length */
&CompCode, /* completion code */
&Reason); /* reason code */
您使用的是什麼版本的MQ? 2010年的文檔中提到「DataLength參數無效,參數指針無效或指向只讀存儲器(檢測無效的參數指針並不總是可能的;如果檢測不到,則無法預測結果) 如果BufferLength參數超出了爲客戶端通道協商的最大消息大小,則也可以在MQGET,MQPUT或MQPUT1調用中將此原因返回給MQ MQI客戶端程序。「所以檢查是否有這種情況。 – Shashi
我不知道您的配置,但是我在z/OS上,其中> 4MB是單獨購買的選件。所以在這裏它永遠不會工作這可能是你的問題嗎? –
我在Unix上使用Websphere MQ 7.5。 MQGET程序位於另一個unix(AIX)上。我已閱讀關於此問題的文檔,但這些對我無效。嘗試閱讀我在帖子中給出的msg2文件的源代碼。 – Cleankod