这是我第一次使用WebJob类型的应用程序.我创建了一个webjob项目,并在解决方案中附带Program.cs和Function.cs.
我已经删除了,Function.cs因为在这个项目中没有队列,我将从中获取数据.
现在Program.cs已有Main方法如下:
class Program
{
// Please set the following connection strings in app.config for this WebJob to run:
// AzureWebJobsDashboard and AzureWebJobsStorage
static void Main()
{
var host = new JobHost();
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这RunAndBlock是连续运行webjob,但我希望这项工作只运行一次.我想按计划从外部控制执行.我想知道如何让我的代码只运行一次?如下所示,我有一个SupportServiceClass RunOnePoolProvisioingCycle,我想只调用一次这个方法.这是正确的方法吗?
static void Main()
{
SupportService _supportService = new SupportService();
_supportService.Initialize();
_supportService.SetPoolProvisioningConfigurations();
_supportService.RunOnePoolProvisioningCycle();
}
Run Code Online (Sandbox Code Playgroud)
还是这个?
static void Main() …Run Code Online (Sandbox Code Playgroud) 我有一个azure存储队列,其上有超过100,000个队列项.完成每个项目的平均处理时间约为1分钟(如WebJob仪表板中所报告).
我已将webJob的最大批量大小设置为32,如下所示:
JobHostConfiguration config = new JobHostConfiguration();
config.Queues.BatchSize = 32;
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
Run Code Online (Sandbox Code Playgroud)
如果我将其设置为高于32,则webjob将无法启动并保持翻转(等待重启和启动),因此我假设32是最大批量大小.
但是,我的应用服务计划运行时具有很低的4%CPU利用率.我已根据CPU使用情况启用了自动缩放功能.
我想要做的是弄清楚如何使web作业并行执行更多任务,以便在需要时可以开始使用更多的CPU使用量,并希望使其自动扩展然后处理更多.我可以使用哪些杠杆来使我的WebJob更好地利用我的App Service Plan实例?
我创建了第一个连续运行的天蓝色网络作业;
我不太确定这是一个代码问题,但为了完整起见,这里是我的代码:
static void Main()
{
var host = new JobHost();
host.CallAsync(typeof(Functions).GetMethod("ProcessMethod"));
host.RunAndBlock();
}
Run Code Online (Sandbox Code Playgroud)
对于该功能:
[NoAutomaticTrigger]
public static async Task ProcessMethod(TextWriter log)
{
log.WriteLine(DateTime.UtcNow.ToShortTimeString() + ": Started");
while (true)
{
Task.Run(() => RunAllAsync(log));
await Task.Delay(TimeSpan.FromSeconds(60));
}
log.WriteLine(DateTime.UtcNow.ToShortTimeString() + "Shutting down..");
}
Run Code Online (Sandbox Code Playgroud)
请注意,异步任务会触发自己的任务。这是为了确保它们以相同的间隔非常准确地启动。工作本身是下载一个网址,解析并在数据库中输入一些数据,但这不应该与我遇到的多实例问题相关。
我的问题是,一旦运行了大约 5 分钟,就会调用第二个 ProcessMethod,这使得我有两个会话同时做同样的事情。第二种方法说它是“从仪表板启动”,尽管我 100% 有信心我自己没有单击任何内容来启动它。
有人经历过类似的事情吗?
我已经安装了NuGet软件包Micorosft.Azure.WebJobs.ServiceBus,版本1.0.1(2015年3月19日).我的WebJob完全触发了servicebus队列上的新消息:
public static Task ProcessQueueMessage([ServiceBusTrigger("outbound")] BrokeredMessage message, TextWriter log)
Run Code Online (Sandbox Code Playgroud)
我用版本1.1.0(2015年11月19日)更新了NuGet包.现在,不再识别此触发器方法:
找不到工作职能.尝试公开您的工作类和方法.如果您正在使用绑定扩展(例如ServiceBus,Timers等),请确保您已在启动代码中调用扩展的注册方法(例如config.UseServiceBus(),config.UseTimers()等).
有没有其他人遇到过这个问题?
我正在使用Azure Continuous Deploy从Bitbucket存储库中获取ASP.NET MVC项目.但它只使用发布设置发布网站.如何将Continuous Deploy与调试设置或自定义设置一起使用?
PS:我认为没关系,但是我使用Visual Studio 2015和Git工具同步Bitbucket存储库