【问题标题】:Azure Service Bus: Read messages with offsetAzure 服务总线:读取带有偏移量的消息
【发布时间】:2019-02-28 23:23:36
【问题描述】:

我正在 C# 应用程序中读取来自 Azure 服务总线的消息。我正在从死信队列中读取它们,但我想这并不重要。我需要读取给定大小的消息块,从给定的偏移量(也就是一页消息)开始。

我想出了以下非常低效的代码:

SubscriptionClient client  = SubscriptionClient.CreateFromConnectionString(
  connectionString, 
  topic, 
  QueueClient.FormatDeadLetterPath(subscription));

var result = new List<string>();
for (var i = 0; i < offset + size; i++)
{
  var msg = await client.PeekAsync();
  if (msg == null)
  {
    return result;
  }

  if (i >= offset)
  {
    result.Add(msg);
  }
}

return result;

有没有一种方法可以更有效地编写这个“搜索”?

【问题讨论】:

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


【解决方案1】:

SubscriptionClient.ReceiveAsync 方法接受 Int64 序列号(偏移量):

for (var i = offset; i < offset + size; i++)
{
    var msg = await client.ReceiveAsync(i);
    result.Add(msg);
}

【讨论】:

  • 每条消息的序列号是否应该增加 1?不幸的是,尽管偏移量在增加,但带有序列号的 PeekAsync 似乎正在返回相同的消息。
  • offset 没有增加。 i 是。
  • 这就是我的意思。我更新了代码以反映您的差异,它返回第一条消息size 次。
  • 返回的第一条消息的SequenceNumber是多少?
  • 它是 18577348462903296。
猜你喜欢
  • 1970-01-01
  • 2022-07-03
  • 2021-08-16
  • 2017-04-22
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 2015-06-26
相关资源
最近更新 更多