- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 azure 应用程序服务的网站,在 5 个不同的部署槽(Dev、UAT、Staging、Prelive-1、Prelive-2)中运行,每个槽都包含一个用 .NET Core 2.2 编写的计时器触发的 azure webjob(正确放置)在 App_Data 中的正确位置)。每个 Webjob 都包含一个 appsettings.json 文件,该文件具有不同的要访问的 URL。
网络作业每 5 分钟运行一次,并点击应用程序设置中的 url,但是当我检查 azure Insights 中的日志(配置正确)时,我看到只有一个部署槽正在运行(90% 的情况是第一次部署)插槽——“DEV”之一)。我想让所有 webjob 在所有部署槽中运行。
还有一个问题假设我是否重新启动任何部署槽,例如Prelive-1 然后立即执行网络作业,5 分钟后它不会执行。
有没有办法让它们同时运行或一个一个运行,但我只想让所有部署槽每 5 分钟运行一次网络作业。
下面是我的 Program.cs
public class Program
{
public static async Task Main()
{
HostBuilder hostBuilder = new HostBuilder();
hostBuilder.ConfigureWebJobs(builder =>
{
builder.AddAzureStorageCoreServices();
builder.AddAzureStorage();
builder.AddTimers();
})
.ConfigureAppConfiguration((hostContext, configurationBuilder) =>
{
configurationBuilder.AddJsonFile($"appsettings.json", optional: false, reloadOnChange: false);
})
.ConfigureLogging((context, loggingBuilder) =>
{
string instrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
if (!string.IsNullOrEmpty(instrumentationKey))
loggingBuilder.AddApplicationInsightsWebJobs(logBuilder => logBuilder.InstrumentationKey = instrumentationKey);
})
.ConfigureServices(services =>
{
services.AddHttpClient();
})
.UseConsoleLifetime();
using (var host = hostBuilder.Build())
{
await host.RunAsync();
}
}
函数.cs
public class Function1
{
const string CheckPendingFulfillmentsUrlConfigKey = "CheckPendingFulfillmentsUrl";
const string WebJobTimerExpression = "0 */5 * * * *";
readonly IHttpClientFactory httpClientFactory;
readonly ILogger<Function1> logger;
readonly string CheckPendingFulfillmentsUrl;
public Function1(IHttpClientFactory HttpClientFactory, ILogger<Function1> Logger, IConfiguration config)
{
httpClientFactory = HttpClientFactory;
logger = Logger;
CheckPendingFulfillmentsUrl = config[CheckPendingFulfillmentsUrlConfigKey];
}
public async Task TriggerCheckPendingFulfillments([TimerTrigger(WebJobTimerExpression, RunOnStartup = false)] TimerInfo timerInfo, CancellationToken cancellationToken)
{
using (var httpClient = httpClientFactory.CreateClient())
{
if (!string.IsNullOrEmpty(CheckPendingFulfillmentsUrl))
{
try
{
Console.WriteLine("Calling the url " + CheckPendingFulfillmentsUrl);
await httpClient.GetAsync(CheckPendingFulfillmentsUrl);
}
catch(Exception Ex)
{
Console.WriteLine("Error -- "+ Ex.Message);
}
logger.LogInformation(string.Format(Properties.Resources.Info_CheckPendingFulfillmentsTriggered, CheckPendingFulfillmentsUrl));
}
}
}
}
最佳答案
这可能是因为您对所有这些 Web 作业使用相同的存储。
来自documentation :
Behind the scenes, TimerTrigger uses the Singleton feature of the WebJobs SDK to ensurethat only a single instance of your triggered function is running at any given time.When the JobHost starts up, for each of your TimerTrigger functions a blob lease (the Singleton Lock) is taken. This distrubuted lock ensures that only a single instance of your scheduled function is running at any time. If the blob for that function is not currently leased, the function will acquire the lease and start running on schedule immediately. If the blob lease cannot be acquired, it generally means that another instance of that function is running, so the function is not started in the current host. When this happens, the host will continue to periodically check to see if it can acquire the lease. This is done as a sort of "recovery" mode to ensure that when running steady state, if an instance goes down, another instance notice and pick up where the other left off.
所以有两种可能性:
拥有独立的存储帐户:如果每个环境(开发/暂存/产品)都有一个存储帐户,则有意义
指定 JobHostConfiguration 类的 HosId 属性:
var config = new JobHostConfiguration();
config.HostId = "dev|staging|prod";
关于c# - 不同部署槽中的计时器触发的 Azure Webjob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64101550/
我有一个 Azure WebJob,我正在从 visual studio 2017 发布到标准 S1 应用服务,WebJob 应该由 CRON 触发,但始终发布为连续,我无法弄清楚我做错了什么(另外两
我需要在计划的时间段内为不同的用户运行一项作业(例如 CRM 同步)。此同步由 ServiceBus 队列上的另一个函数放置的消息触发,该函数每 30 分钟由 TimerTrigger 触发一次。 现
我需要在计划的时间段内为不同的用户运行一项作业(例如 CRM 同步)。此同步由 ServiceBus 队列上的另一个函数放置的消息触发,该函数每 30 分钟由 TimerTrigger 触发一次。 现
我无法将计划的 Web 作业发布到 Azure 应用服务。我正在使用 Visual Studio 2017。 使用此设置一切正常: { "$schema": "http://schemastore.o
我计划使用连续的 Azure WebJob 发送电子邮件和推送通知。我了解 WebJobs 会因各种原因不时启动和停止。没关系,但我希望有机会在工作关闭之前“清理”一下。 这样我的 WebJob 可以
我已经看到了一些关于使用 settings.job 的指导。为此,但它不起作用 - 在控制台中我看到: WebJob singleton setting is False 如何防止横向扩展运行我的
我正在尝试部署一个触发的网络作业并使用 settings.json 文件安排它。我的 webapp 在 3 个实例中运行,所以我假设 webjob 将在 3 个实例中部署。因此,如果我使用带有 cro
我正在尝试找出是否有任何方法可以修改 webjobs sdk 重试策略。 现在,如果网络作业抛出异常,它会立即重新排队。这并不理想,特别是如果错误是由于数据库超时之类的原因造成的。 有谁知道该策略是否
我正在尝试部署一个触发的网络作业并使用 settings.json 文件安排它。我的 webapp 在 3 个实例中运行,所以我假设 webjob 将在 3 个实例中部署。因此,如果我使用带有 cro
我有一个启用了 Azure 持续交付的 Web 应用程序 (azure webapp)。这意味着每当我进行提交并将其推送到远程时,它都会自动构建应用程序并部署它。 我还有一些网络作业,我希望该过程也可
有没有办法从 MVC 应用程序中更改 webjob 的预定时间,或者是通过 azure 门户的唯一方法。 我不是指初始计划时间,而是在部署后通过 Mvc 应用程序中的 UI 更改计划时间。 最佳答案
Azure 提供了创建“触发式”WebJob 的可能性,例如每天都有时间表。 此外,还有 azure-webjobs-sdk-extensions( https://github.com/Azure/
我开始使用 WebJobs 来处理一些后台任务,但我遇到了关于错误处理和重试的问题。看来,如果我的任何函数是异步的,那么即使我在函数中抛出异常,该函数总是会在仪表板中报告成功。 考虑以下简单示例 ->
我们有一个带有“暂存”部署槽的 Azure 网站设置,我们使用连续的 Azure WebJob 来处理长时间运行的后台作业。看来,当您发布到网站(并包含 WebJob 二进制文件)时,如果 WebJo
我正在开发一个使用 TimerTrigger 的触发式网络作业. 在webjob停止之前,我需要处理一些对象,但我不知道如何触发“webjob停止”。 有了 NoAutomaticTrigger 函数
我正在处理一个网络作业,用于检查网络服务器的一些数据。有时网络服务器很忙,会在几秒钟后重试。 问题是,如果我只是忽略它并通过该函数,它将从队列中删除消息,我将无法重试调用。 我当前的解决方案(我一点也
我读过关于优雅关机的文章 here使用 WEBJOBS_SHUTDOWN_FILE 和 here使用取消 token ,所以我理解正常关闭的前提,但是我不确定它们将如何影响正在处理队列消息的 WebJ
如果运行webjob时出现任何异常或错误,我想释放所有对象。我如何知道是否发生错误。webjob 是否有任何错误触发器? 最佳答案 可以有两种方法来处理这个问题: 1) Try/Catch 方法:-
我在 AppService 中长时间运行 Web 作业(大约 1 小时)。AppService 已打开“始终打开”。 它的初始化是: var host = new JobHost(config); h
我在 AppService 中长时间运行 Web 作业(大约 1 小时)。AppService 已打开“始终打开”。 它的初始化是: var host = new JobHost(config); h
我是一名优秀的程序员,十分优秀!