【发布时间】:2017-04-07 17:05:16
【问题描述】:
当一个.net windows服务连接到Websphere MQ队列订阅并不断读取消息时,我们如何处理网络断开或发生错误等问题,我们可以一直依赖MQQueueManager.IsConnected属性吗?这篇文章让我很困惑:IC75673: MQQueueManager.IsConnected property is "true" after the connection is broken in a .NET application.
下面是我必须从队列中读取消息的代码,我使用的是 MQ 版本 8.0
private MQQueueManager _queueManager;
private MQQueue _queue;
private MQTopic _topic;
public bool isSubscribed = false;
public void Subscribe()
{
var queueManagerName = "myQueueManager";
var properties = new Hashtable();
//Set all the properties here
_queueManager = new MQQueueManager(queueManagerName, properties);
//Conect to Queue
_queue = _queueManager.AccessQueue("devQueue", MQC.MQOO_INPUT_AS_Q_DEF);
isSubscribed = true;
while (isSubscribed)
{
if (cancellationToken.IsCancellationRequested)
{
isSubscribed = false;
cancellationToken.ThrowIfCancellationRequested();
}
try
{
Receive(onMessageReceived);
}
catch (Exception ex)
{
Console.WriteLine("Exception: {0}", ex);
}
}
}
public override void Receive<T>(Action<T> onMessageReceived)
{
try
{
var dataReceived = new MQMessage();
_queue.Get(dataReceived);
T message;
message = (T)(object)dataReceived;
onMessageReceived(message);
_queueManager.Commit();
}
catch (Exception ex)
{
throw ex;
}
}
【问题讨论】: