【发布时间】:2017-03-16 00:26:09
【问题描述】:
我正在尝试让 Windows 服务中的多个线程(任务)连接到与订阅者相同的队列,以便我可以更快地处理我的消息。当我连接到我的队列时,我在我的第一个订阅线程上接收消息,其余的都是空闲的。以下是我用来订阅和接收消息的代码:
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;
}
}
我还尝试使用MQC.MQOO_INPUT_SHARED 访问队列,但也不起作用。我错过了什么吗?
【问题讨论】:
-
请问您正在运行什么版本的 MQ(dspmqver 输出)?
-
@JasonE 8.0 版