c# - 将 webjob(Microsoft.Azure.WebJobs) 包更新到 3.0.16 版后,没有发生显式死信
问题描述
使用以前的 2.3.0 版本的 webjob 显式死信是可能的。
下面是示例代码
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.ServiceBus;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
public static class Program
{
static ISubscriptionClient subscriptionClient;
public static void Main()
{
var builder = new HostBuilder();
builder.ConfigureAppConfiguration(c =>
{
c.AddJsonFile("appsettings.json");
});
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddServiceBus(sbOptions =>
{
sbOptions.MessageHandlerOptions.AutoComplete = false;
sbOptions.MessageHandlerOptions.MaxConcurrentCalls = 5;
});
});
var host = builder.Build();
using (host)
{
host.Run();
}
}
public static async Task ProcessQueueMessage(
[ServiceBusTrigger("topic_name", "subscription_name")] Message message, TextWriter log)
{
subscriptionClient = new SubscriptionClient("connection_string", "topic_name", "subscription_name");
await subscriptionClient.DeadLetterAsync(message.SystemProperties.LockToken);
await subscriptionClient.CloseAsync();
}
}
使用以前的 webjob(2.3.0 版) JobHostConfiguration() 显式死信是可能的,并且使用 HostBuilder() 的最新版本 3.0.16 没有发生显式死信,它会重试直到达到最大传递计数,然后向死信发送消息,这应该不是预期的行为,只要调用 DeadLetterAsync(),消息就应该进入死信。它在 .net 框架和 .net 核心中都可以观察到。也可以通过使用 MessageHandlerOptions 来实现不使用 webjob 配置显式死信。您能否让我知道如何使用最新版本的 webjob 配置明确地死信。
解决方案
显式死信是 Azure 服务总线 SDK 功能,而不是 WebJobs。您仍然可以这样做,但使用MessageReceiver
需要在函数签名中指定的。对消息的所有操作都是通过 ASB SDK track 2 中的消息接收器完成的。这里有一个例子。
推荐阅读
- javascript - 对异步和承诺的困惑。反应原生
- apache-spark - Spark-shell:当我执行进程时,Web UI 不会改变
- css - 悬停剪辑
- javascript - Javascript:连续 for 循环
- spring-boot - 从部署在 PCF 上的另一个 Java 应用程序调用一个 Java 应用程序
- flutter - 颤动光标轮小部件自动定位动画
- java - Android Studio onCheckedChanged 方法
- swift - SwiftLint 规则在每次扩展之前要求编译标记
- python - 如何使用 Selenium 和 Python 单击值作为下载目录的输入元素
- html - CSS表格布局固定高度问题与间隙