gpt4 book ai didi

c# - SubscriptionClient.RecieveBatch 未检索所有代理消息

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:00 25 4
gpt4 key购买 nike

我有一个控制台应用程序来读取 Azure 服务总线上的订阅中存在的所有代理消息。我那里有大约 3500 条消息。这是我读取消息的代码:

SubscriptionClient client = messagingFactory.CreateSubscriptionClient(topic, subscription);   
long count = namespaceManager.GetSubscription(topic, subscription).MessageCountDetails.ActiveMessageCount;
Console.WriteLine("Total messages to process : {0}", count.ToString()); //Here the number is showing correctly
IEnumerable<BrokeredMessage> dlIE = null;
dlIE = client.ReceiveBatch(Convert.ToInt32(count));

当我执行代码时,在 dlIE 中,我只能看到 256 条消息。我也尝试过提供像 client.PrefetchCount 这样的预取计数,但它也只返回 256 条消息。

我认为一次可以检索的消息数量有一些限制。但是,在 RecieveBatch 方法的 msdn 页面上没有提到这样的事情。我该怎么做才能一次检索所有消息?

注意:

  1. 我只想读取消息,然后让它存在于服务总线上。因此我不使用 message.complete 方法。

  2. 我无法从服务总线中删除并重新创建主题/订阅。

编辑:

我使用 PeekBatch 而不是 ReceiveBatch,如下所示:

    IEnumerable<BrokeredMessage> dlIE = null;
List<BrokeredMessage> bmList = new List<BrokeredMessage>();
long i = 0;
dlIE = subsciptionClient.PeekBatch(Convert.ToInt32(count)); // count is the total number of messages in the subscription.
bmList.AddRange(dlIE);
i = dlIE.Count();
if(i < count)
{
while(i < count)
{
IEnumerable<BrokeredMessage> dlTemp = null;
dlTemp = subsciptionClient.PeekBatch(i, Convert.ToInt32(count));
bmList.AddRange(dlTemp);
i = i + dlTemp.Count();
}
}

我的订阅中有 3255 条消息。第一次调用 peekBatch 时,它会收到 250 条消息。因此它进入带有 PeekBatch(250,3225) 的 while 循环。每次只收到250条消息。我在输出列表中的最终消息总数为 3500,其中有重复项。我无法理解这是怎么发生的。

最佳答案

我已经弄清楚了。订阅客户端会记住它检索到的最后一批,并在再次调用时检索下一批。

所以代码是:

    IEnumerable<BrokeredMessage> dlIE = null;
List<BrokeredMessage> bmList = new List<BrokeredMessage>();
long i = 0;
while (i < count)
{
dlIE = subsciptionClient.PeekBatch(Convert.ToInt32(count));
bmList.AddRange(dlIE);
i = i + dlIE.Count();
}

感谢MikeWo的指导

注意:一次可以查看的消息数量似乎存在某种大小限制。我尝试使用不同的订阅,并且每个订阅获取的消息数量不同。

关于c# - SubscriptionClient.RecieveBatch 未检索所有代理消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com