我可以过滤某些属性从消息队列(MSMQ)收到的消息吗? (a.k.a.主题)

时间:2008-09-15 16:00:21

标签: msmq

我在C#中创建一个Windows服务来处理来自队列的消息。我想让ops根据消息的属性灵活地在生产中对服务进行分区。例如,他们应该能够说一个实例处理来自客户A的Web订单,来自客户A的另一个批量订单,来自客户B的第三个Web订单或批处理订单等等。

我目前的解决方案是为每个客户\来源组合分配单独的队列。将订单放入队列的过程必须做出正确的决定。我的Windows服务可以配置为从一个或多个队列中提取消息。这很麻烦,但它确实有效。

2 个答案:

答案 0 :(得分:5)

不,但您可以 PEEK 进入队列,并决定是否确实要使用该消息。

答案 1 :(得分:3)

使用 GetMessageEnumerator2(),如下所示:

MessageEnumerator en = q.GetMessageEnumerator2();

while (en.MoveNext())
{
    if (en.Current.Label == label)
    {
        string body = ((XmlDocument)en.Current.Body).OuterXml;
        en.RemoveCurrent();
        return body;
    }
}