Azure 服务总线 MessageCountDetails.ActiveMessageCount 不正确

Azure Service Bus MessageCountDetails.ActiveMessageCount is incorrect

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

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

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

下面是我尽量简化的代码(仅供主题使用):

代码的初始化看起来像

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();
}

警报的简化class

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

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

我做错了什么?

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

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

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