我构建了一个服务,每隔几分钟轮询我们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时它都应该返回最新的数字。
我做错了什么?
答案 0 :(得分:1)
我有类似的问题,SubscriptionDescription MessageCount值未更新。 我发现MessageCount属性不会向服务询问实际的消息号,但是在创建SubscriptionDescription对象时它会被初始化。
要获取更新的消息编号,您必须从NamespaceManager再次获取SubscriptionDescription。
NamespaceManager.GetSubscription("TopicName", "SubscriptionName").MessageCount;