我首先看到Windows Azure中有3个选项来安排作业.批处理,调度程序和Web作业.是否有任何链接或视频解释了什么是差异以及什么时候和利益使用?提前致谢
我正在使用带有Windows Azure Storage SDK的Webjob.当一个新项目出现在队列中时,我的类中会调用一个方法.根据SDK文档,如果我将TextWriter作为参数添加到我的方法中,SDK将为我提供一个我可以写入的TextWriter,它将显示在Webjob的日志记录基础结构中.这使得诊断问题和解决问题非常容易.
public async static void ProcessQueueMessage([QueueTrigger("queueName")]MyModelType model, TextWriter logger)
{
await logger.WriteLineAsync(string.Format("Processing Item {0}", model.SasUrl));
// Some work here
await logger.WriteLineAsync(string.Format("Done Processing Item {0}", model.SasUrl));
}
Run Code Online (Sandbox Code Playgroud)
但是,很常见的是,在我的方法体内,TextWriter正在被处理掉.我在第二个logger.WriteLineAsync上遇到以下异常:
System.ObjectDisposedException was unhandled by user code
HResult=-2146232798
Message=Cannot write to a closed TextWriter.
Source=mscorlib
ObjectName=""
StackTrace:
at System.IO.__Error.WriterClosed()
at System.IO.StringWriter.Write(Char[] buffer, Int32 index, Int32 count)
at System.IO.TextWriter.WriteLine(String value)
at System.IO.TextWriter.SyncTextWriter.WriteLine(String value)
at System.IO.TextWriter.SyncTextWriter.WriteLineAsync(String value)
at NameOfProject.Program.<ProcessQueueMessage>d__8.MoveNext() in c:\Dev\Path\To\Program.cs:line 173
InnerException:
Run Code Online (Sandbox Code Playgroud)
我找不到其他人遇到这个问题,所以我无法想象SDK或webjobs基础设施中存在错误.
有没有办法告诉记录器是否在通话前被处理掉了?
有没有办法在我的方法中创建一个新的记录器,它将参与WebJobs记录子系统和UI?
我安排了一个webjob每天凌晨2点运行,使用cron表达式(0 0 2***)按照使用CRON表达式创建预定WebJob的教程 ,我的服务器在"美国中北部"区域创建,所以我希望它应该在美国中部时区运行但似乎它运行的时间与我指定的时间不同.
我有一个带有几个队列触发函数的Azure webjob.https://docs.microsoft.com/en-us/azure/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to#config上的SDK文档将MaxDequeueCount属性定义为:
队列消息发送到中毒队列之前的最大重试次数(默认值为5).
但我没有看到这种行为.在我的webjob中我得到了:
JobHostConfiguration config = new JobHostConfiguration();
config.Queues.MaxDequeueCount = 1;
JobHost host = new JobHost(config);
host.RunAndBlock();
Run Code Online (Sandbox Code Playgroud)
然后我有一个队列触发的函数,我抛出一个异常:
public void ProcessQueueMessage([QueueTrigger("azurewejobtestingqueue")] string item, TextWriter logger)
{
if ( item == "exception" )
{
throw new Exception();
}
}
Run Code Online (Sandbox Code Playgroud)
查看webjobs仪表板,我看到SDK进行了5次尝试(5是默认值,如上所述):
在第5次尝试之后,消息被移动到毒药队列.我希望看到1次重试(或没有重试?)而不是5次.
更新:启用Web应用程序的详细日志记录,并选择将这些日志保存到Azure Blob容器.找到一些与azure-jobs-host-archive容器中的问题相关的日志.这是一个示例,显示出队计数为96的项目:
{
"Type": "FunctionCompleted",
"EndTime": "2017-02-22T00:07:40.8133081+00:00",
"Failure": {
"ExceptionType": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException",
"ExceptionDetails": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: ItemProcessor.ProcessQueueMessage ---> MyApp.Exceptions.MySpecialAppExceptionType: Exception of type 'MyApp.Exceptions.MySpecialAppExceptionType' was thrown.
},
"ParameterLogs": {},
"FunctionInstanceId": "1ffac7b0-1290-4343-8ee1-2af0d39ae2c9",
"Function": { …Run Code Online (Sandbox Code Playgroud) 在我们当前的设置中,有一个Azure App服务的插槽,我的问题是,当插槽停止时它是否还会关闭部署在该插槽上的webjob或者web作业是否会继续运行?
我在使用Visual Studio Team Services(VSTS)部署Azure WebJob时遇到了一些问题.
WebJob似乎已成功部署,但它破坏了托管在同一App Service中的Azure网站!如果我使用VS2013部署,我没有这个问题.
这是我的构建任务,它生成WebJob部署包:
这是我的部署任务:
部署Azure WebJob时没有错误.如果我去Azure门户,我看到WebJob就在那里,它运行成功.WebJob文件wwwroot\App_Data\jobs\triggered\RemoveExpiredDids按预期复制到文件夹中,但问题是其他一些文件将被复制到该wwwroot\App_Data\bin文件夹中,这将破坏已部署到该App Service中的现有网站!
所以我决定找出为什么会发生这种情况.下载并解压缩部署包后,我看到有2个文件夹(app_data和bin)和调度程序文件(settings.job):
这解释了为什么有些程序集被应用到wwwroot\App_Data\binApp Service中.奇怪的是,从VS2013部署时不会发生这种情况!我查看了MSBuild日志,找到了以下行:
由于跳过指令"SkipBinFolderOnDeploy",跳过了对象dirPath([app service name]\bin).
总结bin一下,从VSTS部署Azure WebJob时会包含文件夹,但在从VS2013部署Azure WebJob时会将其排除在外.
所以我的问题是:如何bin在使用VSTS时阻止部署文件夹?是否有任何MSBuild参数/标志来执行此操作?
本周,我注意到我的团队Azure门户网站上有持续的网络作业。
https://azure.microsoft.com/zh-CN/blog/daas/
引用了可能相关的内容,但是此页面上的某些链接似乎已消失。其中之一重定向您以检查Azure“诊断和解决问题”刀片。似乎已经对其UI进行了修改,尽管我从来没有真正需要使用此功能,所以我不习惯其所有以前/新功能吗?特征。
在这里,我发现了一些似乎有用的诊断工具和Azure App Service“自动修复”。我发现似乎没有任何内容依赖于此网络作业,并且Azure门户中我们的任何其他App Services都不存在“ DaaS”。
我可以禁用或删除它吗?我对连续运行Webjob感到不满意,因为我们团队中没有人知道它在做什么,或者似乎出于任何原因而需要。
我们会失去这些吗?诊断刀片的功能?如果没有webapp,则这些功能似乎可用于App Services。
其日志如下:
[11/02/2018 17:11:16 > 500837: SYS INFO] Status changed to Starting
[11/02/2018 17:11:16 > 500837: SYS INFO] WebJob singleton setting is False
[11/02/2018 17:11:16 > 500837: SYS INFO] Run script 'DaaSRunner.exe' with script host - 'WindowsScriptHost'
[11/02/2018 17:11:16 > 500837: SYS INFO] Status changed to Running
[11/02/2018 18:11:16 > 500837: SYS INFO] WebJob is still running
[11/03/2018 06:11:18 > 500837: SYS INFO] WebJob is still running
[11/03/2018 09:47:19 …Run Code Online (Sandbox Code Playgroud) 我有一个连续运行的天蓝色Web作业,但是日志表明在周末它的状态变为Aborted,然后是Stopped.虽然我周末没有使用该网站,但我不确定为什么会发生这种情况,因为队列中仍有很多消息需要处理.
什么可以导致连续的Web作业停止或中止?是否有超时期限?多个错误的发生是否也会导致它停止或中止?
我正在使用Azure Webjobs处理队列中的消息.
我看到Webjobs SDK在10分钟后再次处理任何失败的消息,如果失败5次,它会将其移动到毒性队列(1).
此外,我可以看到队列中消息的nextVisibleTime,即插入时间(2)后10分钟.
我想使用AzureSDK错误处理消息,但我不能等待10分钟再次处理消息.
有什么方法可以将nextVisibleTime设置为几秒钟吗?
如果方法在完成之前失败,则不删除队列消息; 在10分钟的租约到期后,该消息将被释放以便再次接收并处理.
public static void WriteLog([QueueTrigger("logqueue")] string logMessage,
DateTimeOffset expirationTime,
DateTimeOffset insertionTime,
DateTimeOffset nextVisibleTime,
Run Code Online (Sandbox Code Playgroud)
注意:StackOverflow中有类似的问题,但没有答案:
我需要实现计划任务,以便每个X时间作业将开始运行并将启动.exe文件.
我很容易在Azure中完成这些任务,但在Amazon Web Services中找不到合适的东西.
你能告诉我AWS的Azure WebJobs是否有类似内容?