【发布时间】:2013-03-10 08:18:15
【问题描述】:
我对 MQMessage 代理相当陌生。在我的项目中,我想发送一条 xml 消息。一切都很好,但是当消息大于 500 字节时,我的代码会将损坏的消息发送到队列。我正在做的是
//queueManager has been initialized in the class constructor and connected to a channel.
public MQResponse WriteMsg(string QueueName, string strInputMsg)
{
MQResponse response = new MQResponse();
try
{
queue = queueManager.AccessQueue(QueueName,
MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING );
queueMessage = new MQMessage();
queueMessage.DataOffset = 0;
//queueMessage.MessageLength = 2000000;
queueMessage.ResizeBuffer(6 * strInputMsg.Length);
queueMessage.WriteString(strInputMsg);
queueMessage.Format = MQC.MQFMT_STRING;
queuePutMessageOptions = new MQPutMessageOptions();
queue.Put(queueMessage, queuePutMessageOptions);
response.Message = "Message sent to the queue successfully";
response.Status=MQResponseStatus.WriteSuccessful;
}
catch (MQException MQexp)
{
response.Message = "Exception: " + MQexp.Message;
response.Status=MQResponseStatus.WriteFail;
response.CatchedException=MQexp;
}
catch (Exception exp)
{
response.Message = "Exception: " + exp.Message;
response.Status=MQResponseStatus.WriteFail;
response.CatchedException=exp;
}
return response;
}
我猜 queueMessage 应该被正确初始化,以便我们能够发送整个消息。
【问题讨论】:
-
我想在Shashi 的回复中添加两点。 1) 如果你得到一个 JMS 异常,打印链接的异常。 JMS 异常是一种多级数据结构,其中链接的异常具有特定于供应商的错误。如果应用程序不打印它,那么它可能很难调试。 2)您提到使用客户端频道,但我没有看到任何
COMMIT调用。在网络上使用异步消息传递时,总是使用事务处理会话和COMMIT方法。请参阅 JMS 1.1 规范 4.4.13 Duplicate Production of Messages 或我的其他 SO 答案以了解原因。