我觉得奇怪的是,在MSMQ中有一种名为MessageQueue.Exists
和MessageQueue.Create
的方法。但是,没有方法可以在给定路径的情况下检索队列,即使提到的两个方法也将路径作为参数。
如何通过路径有效检索队列?
我能做到:
MessageQueue.GetPrivateQueuesByMachine(".").First(m => m.Path == "something");
但我不会称之为纯粹也不高效。我的机器将处理大量流动的队列消息,目前有多达250个队列在运行。
大多数这些队列都是从ASP .NET MVC站点处理的,我无法“存储”队列的引用以供以后使用。每个请求都需要再次获取每个队列。
答案 0 :(得分:0)
如果队列不是动态创建的,我会玩下面的代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Messaging;
static class MessageQueueHelper
{
private static Dictionary<string, MessageQueue> queues;
public static MessageQueue GetPrivateQueueByName(string machinename, string queueName)
{
if (machinename == ".") {
machinename = Environment.MachineName;
}
if (queues == null) {
queues = new Dictionary<string, MessageQueue>();
try {
dynamic qlist = MessageQueue.GetPrivateQueuesByMachine(machinename).ToList;
foreach (MessageQueue q in qlist) {
queues.Add(q.MachineName.ToLowerInvariant + q.Path.ToLowerInvariant, q);
}
} catch (Exception ex) {
//access denied? server not found?
throw new Exception(ex.Message);
}
}
string key = string.Format("{0}FormatName:DIRECT=OS:{0}\\private$\\{1}", machinename, queueName).ToLowerInvariant;
try {
return queues.Item(key);
} catch (Exception ex) {
return null; //probably key not found
}
}
}
答案 1 :(得分:0)
使用MessageQueue
constructor
MessageQueue mq = new MessageQueue(queuePath);