【发布时间】:2017-11-01 00:54:29
【问题描述】:
当前使用 Azure 服务总线主题并在使用 ReceiveBatch 方法接收我的消息时遇到问题。问题是预期的结果实际上并不是我得到的结果。这是基本的代码设置,用例如下:
SubscriptionClient client = SubscriptionClient.CreateFromConnectionString(connectionString, convoTopic, subName);
IEnumerable<BrokeredMessage> messageList = client.ReceiveBatch(100);
foreach (BrokeredMessage message in messageList)
{
try
{
Console.WriteLine(message.GetBody<string>() + message.MessageId);
message.Complete();
}
catch (Exception ex)
{
message.Abandon();
}
}
client.Close();
MessageBox.Show("Done");
使用上面的代码,如果我发送 4 条消息,则在第一次运行时轮询我得到第一条消息。在第二次运行时,我得到了另外 3 个。我希望同时得到所有 4 个。它似乎总是在第一次民意调查中返回一个奇异值,然后在随后的民意调查中返回。 (结果与 3 和 5 相同,第二次尝试发送 n 条消息中的 n-1 条,第一次尝试发送 1 条消息)。
如果我要接收 0 条消息,则该操作需要大约 30-60 秒才能获得 messageList(计数为 0)。我需要这个立即返回。
如果我将代码更改为
IEnumerable<BrokeredMessage> messageList = client.ReceiveBatch(100, new Timespan(0,0,0));,那么问题 #2 就会消失,因为问题 1 仍然存在,我必须调用两次代码才能获取所有消息。
我假设问题 #2 是因为我在 #3 中覆盖了默认超时值(尽管我发现如果有消息,它会立即响应而无需等待默认时间,这令人困惑)。但是,我不确定为什么我从未在单个 ReceiveBatch 中收到全部消息。
【问题讨论】:
-
有问题的
Topic是Partitioned吗?我已经看到与Partitioned Queue完全相同的行为。 -
谢谢,这是问题的一部分。
标签: c# azure azureservicebus