azureservicebus - Azure 服务总线 CancelScheduledMessageAsync - 当序列号不再存在时无法捕获 MessageNotFoundException
问题描述
我正在使用ScheduleMessageAsync
.
var sequenceNumber = await sender.ScheduleMessageAsync(message, sendMessageOn)
我有时需要取消这些消息。我通过调用来做到这一点CancelScheduledMessageAsync
。
await sender.CancelScheduledMessageAsync(sequenceNumber)
有时sequenceNumber
不再有效(消息已排队等)。为了处理这些异常,我将调用包装CancelScheduledMessageAsync
在一个try catch
带有异常过滤器的MessageNotFoundException
.
try {
await sender.CancelScheduledMessageAsync(sequenceNumber)
} catch (Exception ex) when (ex is MessageNotFoundException) {
_logger.LogError("Ignored MessageNotFoundException)
}
这不起作用。抛出异常,但 catch 块永远不会执行。
Azure.Messaging.ServiceBus.ServiceBusException: Messages not found. One or more sequence numbers missing. ... (MessageNotFound)
删除异常过滤器以便我捕获所有异常有效,这表明我正在过滤错误的异常,但我不认为我是。
希望我只是太累了,忽略了显而易见的事情。
解决方案
问题是这MessageNotFoundException
是其中的一部分,Microsoft.Azure.ServiceBus
但我正在使用Azure.Messaging.ServiceBus
. 对于Azure.Messaging.ServiceBus
以下问题:
try {
await sender.CancelScheduledMessageAsync(sequenceNumber)
} catch (ServiceBusException ex) when (ex.Reason == ServiceBusFailureReason.MessageNotFound) {
_logger.LogError("Ignored MessageNotFoundException)
}
请注意对异常过滤器的更改。我们不是捕捉或过滤MessageNotFoundException
,而是捕捉ServiceBusException
和过滤ServiceBusException.Reason
。
推荐阅读
- css - css 中的 z-index 在我的主菜单中不起作用
- angular - 错误:类型“void”不可分配给类型“HttpEvent”
' - azure-devops - 根据触发分支设置环境变量 - Azure DevOps Pipeline
- css - 如何使用 CSS 媒体查询在 Vaadin 8 中禁用 VerticalLayout
- laravel - 错误 419 页面已过期。Laravel Yajra 数据表
- r - 如何获取 Google 搜索结果计数(搜索结果总数)
- c# - 如何使用 COM Interop (Excel) 解决依赖注入
- maven-plugin - 在 Anypoint Studio 中设置 maven 原型
- python-3.x - 在 OpenCV 中播放电影
- css - 带有 DJANGO 的静态文件(未找到 CSS)