B-S*_*art 10 c# azure azureservicebus
目前使用Azure Service Bus主题并遇到使用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");
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,如果我发送4条消息,那么在第一次运行时轮询我得到第一条消息.在第二轮比赛中,我得到了另外一部分.我期待在同一时间获得全部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中收到全部消息.
我让ReceiveBatch()正常工作的方式是做两件事.
SubscriptionDescription sd = new SubscriptionDescription(topicName, orgSubName);
sd.EnableBatchedOperations = true;
在我完成这两件事后,我能够按照预期使用主题 IEnumerable<BrokeredMessage> messageList = client.ReceiveBatch(100, new TimeSpan(0,0,0));
| 归档时间: |
|
| 查看次数: |
4803 次 |
| 最近记录: |