Azure Service Bus MessageCountDetails.ActiveMessageCount不正确

时间:2017-04-25 09:58:19

标签: c# azure azureservicebus azure-servicebus-queues azure-servicebus-topics

我构建了一个服务,每隔几分钟轮询我们ASB上的队列和主题。代码有一个初始化部分,用于设置类,以及在调用类的某些函数的cron作业上运行的部分。

我面临的问题是,在运行此问题时,我会在每次计划执行时获得相同的计数。一旦我停止服务并重新运行它,我会得到更新的数字。

我的解决方案是在每次预定的运行中重新初始化所有内容。现在的问题是我需要添加一些功能,而这不是一个选项。

以下是我尽可能简化的代码(仅限主题):

代码的初始化看起来像

var nsmgr = NamespaceManager.CreateFromConnectionString("conn string");
var topics = nsmgr.GetTopics();

foreach (var topic in topics)
{
    var subscriptions = nsmgr.GetSubscriptions(topic.Path);
    foreach (var subscription in subscriptions)
    {         
        someStaticListOfAlerts.Add(new Alert (subscription.Name,()=> (int)subscription.MessageCountDetails.ActiveMessageCount))      

    }
}

每隔几分钟调用的代码是

foreach (Alert a in someStaticListOfAlerts)
{
    a.Refresh();
}

警报类的简化

public class Alert {
    public Alert (string name, Func<int> count)
    {
      // set in local vars
    }
    public void Refresh()
    {
      Console.Write ($"{_name} - {_count()}");
    }
}

这是SubscriptionDescription类的预期行为吗?在刷新SubscriptionDescription或订阅方面,我在MSDN上找不到太多,这让我相信每次调用MessageDetails.Count时它都应该返回最新的数字。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我有类似的问题,SubscriptionDescription MessageCount值未更新。 我发现MessageCount属性不会向服务询问实际的消息号,但是在创建SubscriptionDescription对象时它会被初始化。

要获取更新的消息编号,您必须从NamespaceManager再次获取SubscriptionDescription。

NamespaceManager.GetSubscription("TopicName", "SubscriptionName").MessageCount;