【发布时间】:2016-10-05 01:39:05
【问题描述】:
我正在尝试从 Websphere MQ 队列中读取一个 100 MB 的文件。文件应包含大约。 800.000 条记录。但是在某个行号(通常在 90.000 左右)之后,我只得到空的(或者可能是 �,这取决于我尝试查看文件的方式)。
我被告知队列应该允许 100 MB 消息。
我的代码:
var mqQueueManager = getMqQueueManager(ConfigurationManager.AppSettings["MQ_QueueManager"]);
var mqQueue = mqQueueManager.AccessQueue(mqReceiveQueueName,
MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING);
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.Options = MQC.MQGMO_NO_WAIT;
for (int i = 0; i < maxMessagesToRead; i++)
{
var mqMessage = new MQMessage();
mqQueue.Get(mqMessage, gmo);
messageTexts.Add(mqMessage.ReadString(mqMessage.MessageLength));
}
这段代码有问题吗?还是发送方的错误?
【问题讨论】:
-
是的,MQ 确实允许 100MB 的消息大小。为此需要更改队列管理器、队列和通道的配置。你做完了吗?
-
请检查 MAXMSGL 属性。它定义了最大消息大小。正如@Shashi 所说,此属性存在于队列、队列管理器和通道级别
-
MQ 设置显示正确。 mqQueue.Get(mqMessage, gmo) 是否正确或者我应该使用 mqQueue.Get(mqMessage, gmo, maxMsgSize) 重载? mqMessage.ReadString(mqMessage.MessageLength) 是否正确或者我应该使用例如 mqMessage.ReadFully(...)?还有什么值得一试的吗?