- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我调用QueueClient.Close()
时,它总是引发异常:
The operation cannot be performed because the entity has been closed or aborted.
即使队列为空,它也会引发异常。
虽然我使用OnMessageOptions.ExceptionReceived
来处理它,但这让我很烦。我的代码有问题吗?
如何优雅地停止 QueueClient?
[启动和停止消息传递]
// create a QueueClient with Exception handler.
var queueClient = queueManager.GetStorage<UpdateTriggerQueueClient>();
var options = new OnMessageOptions
{
AutoComplete = false
};
// When the Close() called, it always handles an exception.
options.ExceptionReceived += (sender, args) =>
logger.Error("An excepion occurred.", args.Exception);
// prepare a CancellationTokenSource.
var cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = cancellationTokenSource.Token;
// start message pump.
queueClient.OnMessageAsync(async message =>
await DoWork(message, cancellationToken), options);
// sometime after, stop(cancel) the work.
Task.Delay(5000).Wait();
cancellationTokenSource.Cancel();
// some code to wait every in-progress messages finished.
// ...
// close the client.
queueClient.Close();
[DoWork方法]
private async Task DoWork(BrokeredMessage message, CancellationToken cancellationToken)
{
logger.Trace("begin work");
// Do something cancellable work.
await Task.Delay(500, cancellationToken)
.ContinueWith(async t =>
{
// complete the message when the task completed,
// otherwise, abandon the message.
if (t.Status == TaskStatus.RanToCompletion)
{
await message.CompleteAsync();
}
else
{
await message.AbandonAsync();
}
})
.ContinueWith(t =>
{
// cleanup
logger.Trace("end work");
});
}
最佳答案
您可以通过更新订阅来停止接收所有消息:
_namespaceManager.UpdateSubscription(new SubscriptionDescription(_strTopic, _strSubscription)
{
Status = EntityStatus.ReceiveDisabled
});
这可能会解决您的问题,即使这并不完全是您所要求的。 (我也在尝试找出如何正确地 close() 。
您还需要更新状态才能再次开始接收。
关于c# - 如何优雅地关闭Azure ServiceBus QueueClient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29456678/
Microsoft 已弃用名为 Microsoft.Azure.ServiceBus 的包,并将该包更新为 Azure.Messaging.ServiceBus,但在最近的更新中,他们删除了 Queu
创建多个队列客户端来监听不同服务总线队列的最佳实践是什么?有一个 MessagingFactory 类,但是 Microsoft.ServiceBus.Messaging 似乎不再作为 nuget 包
Microsoft 已弃用名为 Microsoft.Azure.ServiceBus 的包,并将该包更新为 Azure.Messaging.ServiceBus,但在最近的更新中,他们删除了 Queu
创建多个队列客户端来监听不同服务总线队列的最佳实践是什么?有一个 MessagingFactory 类,但是 Microsoft.ServiceBus.Messaging 似乎不再作为 nuget 包
QueueClient.Receive() 按什么顺序传送消息?我一直在运行一些测试,如果您不 Complete() 它们,我可以看到一些消息(我猜是最上面的消息)会被一遍又一遍地传递。有没有办法强制
我想限制 Azure ServiceBus 队列接收器中的重试次数。 使用带有 MaxRetryCount:3 的控制台应用程序发送消息 private static async Task MainA
背景 我们有一个使用 Azure 服务总线作为消息代理的数据传输解决方案。我们通过 x 队列从 x 数据集传输数据 - 以 x 专用 QueueClient 作为发送方。有些发件人以每两秒一条消息的速
我一直在使用 QueueClient 来处理存储队列的所有功能。我在网上的几个例子中注意到有一个 CloudQueue,它还有几个方法。 两者有什么区别?为什么要使用其中一种而不是另一种? 编辑:我同
当我调用QueueClient.Close()时,它总是引发异常: The operation cannot be performed because the entity has been clos
我正在使用服务总线来连接 Web 角色和辅助角色。我的辅助角色处于连续循环中,并且我正在使用 QueueClient.Receive() 方法接收 Web 角色发送的消息。 但是使用这种方法,如果服务
在 Azure 服务总线中,您可以使用 QueueClient 和 MessageFactory 发送代理消息。我想知道您为什么要使用其中一种而不是另一种。 最佳答案 Azure 服务总线提供了不同的
我的任务是提高处理队列消息的辅助角色的性能。 它使用 queueclient.OnMessage 模型,MaxConcurrentCalls 设置为 1。 在处理过程中,thread.sleep 会持
我正在使用服务总线队列将项目从生产者传递到消费者。生产者能够成功地将项目发送到队列,并且消费者能够正确接收,但随后它显示出奇怪的行为,其中接收方法返回 null (没有错误)代理消息,即使队列有数千条
我需要创建一个高吞吐量的 ServiceBus 队列客户端,每秒可以处理 1000 条消息。我设法实现此目的的唯一方法是通过 ReceiveMode.ReceiveAndDelete 和 Prefet
QueueClient.OnMessage接受回调,Action ,作为一个参数,将由内部消息泵执行,当消息可用时,内部消息泵会不断轮询队列(或订阅)。 我一直在研究 Reflector 中的 Bro
我们将 Azure 服务总线 (Microsoft.Azure.ServiceBus 3.1.0) 中的 session 队列与 ASP.NET Core (2.1) 结合使用。 我们创建了一个 Ho
我正在从异步方法ConfigureConnectionString 调用异步方法InsertOperation。我是否正确使用了 client.OnMessage 调用?我想异步处理队列中的消息,然后
我正在使用Azure Storage Queues我注意到,尽管我的队列中没有很多元素,但我的成本很高。当我分析指标时,我还注意到队列上的带宽很高。经过一番调查后,我发现我的代码有问题。我使用以下循环
我正在从异步方法ConfigureConnectionString 调用异步方法InsertOperation。我是否正确使用了 client.OnMessage 调用?我想异步处理队列中的消息,然后
我正在使用Azure Storage Queues我注意到,尽管我的队列中没有很多元素,但我的成本很高。当我分析指标时,我还注意到队列上的带宽很高。经过一番调查后,我发现我的代码有问题。我使用以下循环
我是一名优秀的程序员,十分优秀!