1

我有 1 个主题和 1 个订阅。

我正在创建这样的消息:

BrokeredMessage messageTaskA = new BrokeredMessage("New Task");
messageTaskA.Properties["Type"] = "A";

BrokeredMessage messageTaskB = new BrokeredMessage("New Task");
messageTaskB.Properties["Type"] = "B";

我想要总消息,类型 A 的总消息,类型 B 计数器的总消息:

1) Subscription 中的消息总数:SubscriptionDescription desc = namespaceManager.GetSubscription("topicName", "subscriptionName"); totalTask​​ = desc.MessageCount;

2) A 类订阅中的消息总数:????

3) B 类订阅中的消息总数:????

不使用 Receive 和 Abandon 功能可以做到这一点吗?也许使用过滤器?

预先感谢瑞

4

4 回答 4

0

为什么不使用 2 Subscriptions 将适当的消息类型放入适当的订阅中?

于 2014-12-16T19:42:45.843 回答
0

您可以添加一个过滤器,以便 A 类型的消息最终出现在订阅 A 中,而 B 类型的消息最终出现在订阅 B 中。

就像是:

myNamespaceManager.CreateSubscription(subDescriptionTypeB, new SqlFilter("Type = 'B'"));

然后您可以单独处理每个队列的消息。

问题是您是否需要确保消息的处理顺序。

您还可以使用peek 方法从订阅中获取消息而不锁定它。但是效率不是很高,因为您需要获取所有消息,所以如果队列中有很多消息,我会说这是一个坏主意。

于 2015-02-26T12:45:26.420 回答
0

尝试这个

 var subscriptionDes = namespaceManager.GetSubscription("TestTopic", "SubscriptionName");
            long messageCount = subscriptionDesc.MessageCount;
于 2015-02-26T09:45:15.233 回答
0

这并不简单,因为包括其属性的消息在服务总线中处于序列化模式。除非您将其出列,否则您无法查看消息的属性。

我可以想到一种方法,您可以使用 peeklock ,检查属性,进行计数并放弃它。如果只有一个客户端,因为其他客户端在锁定期间无法看到该消息,这将是一件好事。

您还可以创建不同的订阅,而不是将类型放入属性中。

于 2013-07-25T15:25:40.490 回答