当从QueueManager断开连接时,我收到错误代码为2195的MQException。我无法找到原因。我怎样才能找出这个例外的原因?
我的代码看起来像这样。最后一行是抛出异常。
MQQueueManager qMgr = null;
MQQueue fromQueue = null;
try
{
// mq properties
Hashtable properties = new Hashtable();
properties.Add(MQC.HOST_NAME_PROPERTY, _config.HostName);
properties.Add(MQC.PORT_PROPERTY, _config.Port);
properties.Add(MQC.CHANNEL_PROPERTY, _config.ChannelName);
// managed mode
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
// create connection
qMgr = new MQQueueManager(_config.QueueManagerName, properties);
fromQueue = qMgr.AccessQueue(_config.QueueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.Options = MQC.MQGMO_SYNCPOINT | MQC.MQGMO_FAIL_IF_QUIESCING | MQC.MQGMO_WAIT;
gmo.WaitInterval = Convert.ToInt32(timeout.TotalMilliseconds % Int32.MaxValue);
try
{
MQMessage message = new MQMessage();
fromQueue.Get(message, gmo); //wait for message
if (message != null && message.MessageLength > 0)
{
string strMsg = message.ReadString(message.MessageLength);
ret = true;
}
}
catch (MQException ex)
{
if (ex.ReasonCode != MQC.MQRC_NO_MSG_AVAILABLE)
{
throw;
}
}
}
finally
{
try
{
if (fromQueue != null)
fromQueue.Close();
if (qMgr != null)
if(qMgr.IsConnected)
qMgr.Disconnect();
答案 0 :(得分:0)
MQC.MQGMO_SYNCPOINT
您正在创建本地UOW(工作单元),但您从不提交或撤销交易。现在,对于正常的断开连接(与异常或崩溃),MQ假设自动提交消息。但是你永远不应该回答MQ为你做的工作。
我建议你使用MQC.MQGMO_NO_SYNCPOINT,除非你真的想要在UOW中检索消息,但是你需要添加提交或回调调用。
如果(qMgr.IsConnected)
这种方法调用毫无意义。所有这一切都是看最后一个电话的CC& RC值来确定是返回true还是false。它实际上并没有测试连接。正如我所说,毫无意义。