1、工作任务系统
在PAAS平台或SAAS平台的基础设施中,如果没有一个后台工作任务的系统,则很多譬如发送邮件、短信、定时导出报表等的工作繁琐而难以保证,因此亟需这样的一个任务系统基础服务解决当下痛点。
然而在网站下并没有一个很好的解决方案可以在后台进行常规工作和批量工作。现在Azure云支持一个名为“ Azure WebJobs ” 的东西来简单地解决这个问题。
2、Azure 云提供的工作任务
系统支持各种不同的语言。
3、使用场景
当我想做一些简单的事情 - 比如调整一些图像时 - 我会写一个脚本或一个小的.NET应用程序。事情确实变得复杂,但是当你想要采取简单的事情并做n次时。将命令行应用程序扩展到云通常会涉及大量的工作。
假设我想在命令行中使用此功能,并在云中大规模运行:
public static void SquishNewlyUploadedPNGs(Stream input, Stream output)
{
var quantizer = new WuQuantizer();
using (var bitmap = new Bitmap(input))
{
using (var quantized = quantizer.QuantizeImage(bitmap))
{
quantized.Save(output, ImageFormat.Png);
}
}
}
WebJobs旨在使开发,运行和扩展更容易。它们内置于Azure网站中,并与您的网站在同一个VM中运行。
以下是一些适用于Windows Azure WebJobs SDK的典型场景:
- 图像处理或其他CPU密集型工作。
- 队列处理。
- RSS聚合。
- 文件维护,例如聚合或清理日志文件。
- 您希望在后台线程中运行的其他长时间运行的任务,例如发送电子邮件。
WebJobs以两种不同的方式调用,无论是触发还是持续运行。触发的作业按计划发生,或者当某些事件发生时,连续作业基本上会运行一个while循环。
通过将WebJobs复制到文件系统中的正确位置(或使用指定的API执行相同操作)来部署WebJobs。以下文件类型被接受为可用作作业的可运行脚本:
- .exe - 使用WebJobs SDK编译的.NET程序集
- .cmd,.bat,.exe(使用windows cmd)
- .sh(使用bash)
- .php(使用php)
- .py(使用python)
- .js(使用节点)
从门户部署WebJobs后,您可以启动和停止作业,删除它们,将作业上载为ZIP文件等。您可以完全控制。
但值得指出的是,Azure WebJobs 不仅仅是预定的脚本,您还可以将WebJobs创建为用C#编写的.NET项目或其他任何东西。
4、来个栗子
现在我们部署一个控制台程序上去。
using Microsoft.WindowsAzure.Jobs;
using nQuant;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
JobHost host = new JobHost();
host.RunAndBlock();
}
public static void SquishNewlyUploadedPNGs(
[BlobInput("input/{name}")] Stream input,
[BlobOutput("output/{name}")] Stream output)
{
var quantizer = new WuQuantizer();
using (var bitmap = new Bitmap(input))
{
using (var quantized = quantizer.QuantizeImage(bitmap))
{
quantized.Save(output, ImageFormat.Png);
}
}
}
}
}
在Azure网站上设置:
配置参数齐全!!
5、结论
自己编写一个任务平台并不是很难的事情,关键在于扩展的思路,而微软的Azure平台已经准备好了一切。
特别注意:Web 应用可在进入非活动状态 20 分钟后超时。 只有向实际 Web 应用发出的请求才会重置计时器。如果你是IIS的宿主,请调整好参数。