我有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)订阅中的消息总数: SubscriptionDescription desc = namespaceManager.GetSubscription(“topicName”,“subscriptionName”); totalTask = desc.MessageCount;
2)A类订阅中的消息总数: ????
3)B类订阅中的消息总数: ????
可以在不使用Receive和Abandon功能的情况下执行此操作吗?也许使用过滤器?
提前致谢 锐
答案 0 :(得分:0)
这并不简单,因为包含其属性的消息在服务总线中处于序列化模式。 除非您将消息出列,否则无法查看消息的属性。
我可以想到一种方法,你可以使用peeklock,检查属性,进行计数并放弃它。 如果只有一个客户端,这将是很好的,因为其他客户端在锁定期间无法看到该消息。
您也可以创建不同的订阅,而不是将类型放在属性中。
答案 1 :(得分:0)
为什么不使用2个订阅将相应的消息类型放入适当的订阅中?
答案 2 :(得分:0)
试试这个
var subscriptionDes = namespaceManager.GetSubscription("TestTopic", "SubscriptionName");
long messageCount = subscriptionDesc.MessageCount;
答案 3 :(得分:0)
您可以添加一个过滤器,以便类型A的消息在subscriptionA中结束,而类型B的消息最终在subscriptionB中。
类似的东西:
myNamespaceManager.CreateSubscription(subDescriptionTypeB, new SqlFilter("Type = 'B'"));
然后你可以单独列出每个队列的消息。
如果您需要确保消息的处理顺序,则会出现问题。
您还可以使用peek method从订阅中获取邮件而不锁定它。但是效率不高,因为你需要获取所有消息,所以如果队列中有很多消息,我会说这是一个坏主意。