将 webjob(Microsoft.Azure.WebJobs) 包更新到版本 3.0.16 后,显式死信不会发生
After updating webjob(Microsoft.Azure.WebJobs) package to version 3.0.16 explicit deadletter is not happening
使用之前的 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 核心中都可以观察到。
同样,在不使用 webjob 配置的情况下,可以通过使用 MessageHandlerOptions 来实现显式死信。
你能告诉我如何使用最新版本的 webjob 配置明确死信吗?
显式死信是 Azure 服务总线 SDK 功能,而不是 WebJobs。您仍然可以这样做,但是使用需要在函数签名中指定的 MessageReceiver
。对消息的所有操作都是通过 ASB SDK 轨道 2 中的消息接收器完成的。这是一个 example.
使用之前的 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 核心中都可以观察到。 同样,在不使用 webjob 配置的情况下,可以通过使用 MessageHandlerOptions 来实现显式死信。 你能告诉我如何使用最新版本的 webjob 配置明确死信吗?
显式死信是 Azure 服务总线 SDK 功能,而不是 WebJobs。您仍然可以这样做,但是使用需要在函数签名中指定的 MessageReceiver
。对消息的所有操作都是通过 ASB SDK 轨道 2 中的消息接收器完成的。这是一个 example.