Jas*_*ark 2 azure azure-webjobs
有很多教程使用以下代码通过 WebJob SDK 3.0 库创建 Webjobs。特别是“定时器触发器”
public void DoSomethingUseful([TimerTrigger("0 */1 * * * *", RunOnStartup = false)] TimerInfo timerInfo, TextWriter log)
{
// Act on the DI-ed class:
string thing = _usefulRepository.GetFoo();
Console.WriteLine($"{DateTime.Now} - {thing}");
}
Run Code Online (Sandbox Code Playgroud)
上面的例子应该每 1 分钟将这个方法作为一个 webjob 运行一次。然而这行不通。
在包含 setting.job 文件时,我已经设法让 webjob 工作。
setting.job: { "schedule": "0 */1 * * * *" }
Run Code Online (Sandbox Code Playgroud)
我的问题是这两者有什么不同?
更新:
请转到azure webjobs日志,然后您可以看到它实际上按照SDK定义的timerTrigger运行(即使Schedule为n/a,settings.job为空,也没关系):
简而言之,在使用 webjob sdk 3.x 时,您可以使用TimerTrigger属性按照您定义的时间运行该功能。不使用 webjobs SDK(如使用 .zip 文件或从 Visual Studio 发布控制台项目),您可以使用 setting.job 来定义计时器而不是TimerTrigger属性。
1.当您使用 webjobs SDK 3.x 进行计时器触发器时,您应该添加以下代码行:config.AddTimers();.
这是我使用 webjobs SDK 3.x 的代码(它是在 Visual Studio 中创建的 .net core 2.2 控制台项目):
与最新版本的软件包:Microsoft.Azure.WebJobs/ Microsoft.Azure.WebJobs.Extensions/Microsoft.Extensions.Logging.Console
Program.cs 中的代码:
class Program
{
static void Main(string[] args)
{
var builder = new HostBuilder()
.ConfigureWebJobs(config =>
{
config.AddTimers();
config.AddAzureStorageCoreServices();
})
.ConfigureLogging((context, b) =>
{
b.AddConsole();
}
)
.Build();
builder.Run();
}
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个新文件,如 SayHelloWebJob.cs,并在其中编写代码:
public class SayHelloWebJob
{
public void ProcessCollateFiles([TimerTrigger("0 */1 * * * *", RunOnStartup = false)]TimerInfo timerInfo,TextWriter writer)
{
writer.WriteLine("hi, it is a testing running");
Console.WriteLine("test");
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在 appsettings.json 文件中,添加您的存储连接字符串,如下所示:
{
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=xxx;EndpointSuffix=core.windows.net"
}
Run Code Online (Sandbox Code Playgroud)
然后运行项目,可以看到函数每1分钟触发一次:
2.对于settings.job,例如。如果您只是创建一个控制台项目,并且不使用 webjobs sdk。由于您没有使用 webjobs sdk,因此您不能使用 timerTrigger 属性。此时,您可以在此项目中包含 settings.job 文件(在其属性中,将“复制到输出目录”设置为“如果更新则复制”)并像您在帖子中所做的那样配置计划的计时器。发布为 webjob 后(来自 Visual Studio,发布时,选择“Webjob 运行模式”为“按需运行”),它可以按照您在 settings.job 中定义的计划运行。
| 归档时间: |
|
| 查看次数: |
2514 次 |
| 最近记录: |