介绍azure webjobs
       

Azure WebJobs简介

介绍

这里是马拉松咨询, 移动内部和客户端应用程序的漫长过程即将结束, 网站, 服务, 和数据库到云进入微软Azure. 你可以想象, 一些应用程序很容易移动,而另一些则面临挑战. 我们开发的一个移动应用程序, ODU InGame统计数据, 依赖于Web API, SQL Server数据库, 以及一个托管在内部服务器上的Windows服务. 将Web API移动到Azure Web应用程序中,将SQL Server数据库移动到Azure SQL数据库中,相对来说比较轻松. 然而, Windows服务带来了一个问题,因为除了在Azure上运行Windows Server VM外,没有类似的Windows服务,这对于运行单个服务来说成本太高,而且过于昂贵.

Azure云服务的比较

通过一些研究,我找到了许多在Azure中自动化流程的不同选择,包括 微软流, 逻辑应用, 功能, WebJobs. 每一个都有不同的优点和缺点,微软有一个伟大的 article 来帮助您确定哪种方法适合您想要自动化的任务. 我最终选择WebJobs来替代Windows服务,主要是因为它可以部署到现有的应用服务中,而无需额外的成本,而且我已经将Web API转移到Web应用中了. 这似乎也是最有意义的,因为我需要工作每分钟都运行,而功能是一个计算服务,它基于运行时间定价,因此成本可以快速构建.

配置项目

Visual Studio 2017支持创建WebJobs,只要你有最新的 Azure SDK 安装. 在Visual Studio, 去文件, 新建项目并选择Visual c#下的Cloud选项,您将看到Azure选项可用.

创建项目之后,您将得到WebJob的脚手架,如下所示.

通过右键单击项目并选择管理NuGet包来查看NuGet包…, 你会看到微软.Azure.WebJobs和微软.Azure.WebJobs.核心已经自动为您添加. 

我推荐安装的一个NuGet包是Azure WebJobs 扩展 (微软.Azure.WebJobs.扩展),它包含一些很棒的功能,包括TimerTrigger,我正在为这个WebJob使用它.

一旦你安装了NuGet包, 要使WebJob正常工作,你需要输入两个连接字符串. 在程序的Main上面有一个博悦注册登录这个的注释.c,以防你忘了. 在你的应用程序.你会看到AzureWebJobsDashboard和AzureWebJobsStorage的条目. 按照条目上方的评论中描述的方式填写这些内容. 

编码的解决方案

您可能会注意到,为WebJob项目搭建的结构和代码看起来非常类似于控制台应用程序,这是因为它是一个带有Program的控制台应用程序.cs将Main作为进入应用程序的入口点. 我们不会在这里做太多,但我们需要打开Timer扩展的使用,我们还将设置几个环境变量.

    类项目
    {
        //请在app中设置以下连接字符串.配置这个WebJob来运行:
        // AzureWebJobsDashboard和AzureWebJobsStorage
        静态void Main ()
        {
            var 配置 = new JobHostConfiguration();

            //启用定时器扩展
            配置.UseTimers ();

            如果配置.IsDevelopment)
            {
                配置.UseDevelopmentSettings ();
            }

            //告诉azure你的azure连接字符串的位置
            环境.Set环境Variable(“AzureWebJobsDashboard”,ConfigurationManager.ConnectionStrings(“WebJobsDashboard”).ConnectionString);
            环境.Set环境Variable(“AzureWebJobsStorage”,ConfigurationManager.ConnectionStrings(“WebJobsStorage”).ConnectionString);

            var 宿主 = new JobHost(配置);

            //下面的代码确保WebJob将持续运行
            宿主.RunAndBlock ();
        }
    }

我们要看的下一个文件是功能.在cs中,你将为WebJob编码逻辑.  默认情况下,这里没有太多内容.

    公共类函数
    {
        //写入新消息时,此函数将被触发/执行 
        //在一个名为Queue的Azure队列上.
        public static void ProcessQueue消息([QueueTrigger("queue")]字符串消息,TextWriter日志)
        {
            日志.WriteLine(消息);
        }
    }

注意,它是用QueueTrigger设置的.  请记住,您并没有从代码中调用函数中的任何东西.  您的代码是通过Azure WebJob 扩展中的触发器类型之一触发的. 

让我们后退一步,我将解释我希望这个WebJob做什么,以便在我们浏览代码时更有意义.  作为InGame Stats应用后端服务的一部分的Windows服务有一个简单的任务,就是在ODU运动游戏进行期间检查一个FTP站点.  在游戏过程中,FTP站点上的XML文件不断更新,并提供实时统计数据.  windows服务将下载XML文件并将结果保存到SQL Server数据库.  当手机应用的用户选择了正在进行的游戏, 应用程序将调用Web API来获取当前的统计数据,Web API查询数据库并将统计数据XML解析为JSON,应用程序使用JSON来填充统计页面.

我需要WebJob完成的替换Windows服务的基本功能是每分钟登录FTP站点, 如果stats XML文件发生了更改,则获取它, 并将XML保存到Azure SQL数据库.  这样才能正常工作, QueueTrigger无法工作,所以我需要做的第一件事是用TimerTrigger替换它.  我还更改了方法的名称,以反映它正在做什么,因为ProcessQueue消息对这一点没有意义. 

//每60秒运行一次
[TimerTrigger("0 * * * * *"), RunOnStartup = true)] TimerInfo定时器信息, TextWriter日志)
{
     日志.“Stats Downloader已启动.");
}

计时器触发器的语法设置为每60秒通过Cron表达式运行一次. 用于下载和保存XML的其余代码超出了本文的范围,但是我们所做的已经足够发布和运行WebJob了.

发布到Azure

将WebJob发布到Azure上再简单不过了. 只需右键单击项目,选择Publish as Azure WebJob…. 系统将提示您命名WebJob并选择运行模式. 对于这个任务, 我需要WebJob连续运行,以便计时器触发器能够正确工作. 

接下来,将提示您选择一个发布目标. 点击微软 Azure应用服务来选择您的Azure订阅,并选择一个现有的应用服务或创建一个新的应用服务.

监测WebJob

WebJob发布后,进入Azure Portal并选择您的应用程序服务. 在Settings下,选择WebJobs以查看WebJogs页面. 在这个页面中,您可以启动和停止WebJob并查看其属性. 在这里,除了单击Logs按钮,没有什么其他的事情可以做,它将把您带到WebJobs页面进行监视.

主WebJobs页面列出了您的WebJobs及其状态. 单击WebJob的名称以查看其详细信息.

从这里, 您可以单击Toggle Output按钮并查看WebJob日志条目的实时流.

注意,在一定的限制之后, 直播将停止, 您将得到消息“达到了此运行的最大允许输出行数。, 要查看所有的工作日志,您可以启用网站应用程序诊断”. 您的WebJob仍在运行,但您将无法看到日志条目. 如果你能逃脱惩罚的话, 你可以停止,然后从app Service启动你的web应用,重新启动直播流. 

而在最初部署WebJob时,实时流有助于排除问题, 对于WebJob运行一段时间后出现的问题,它是没有帮助的. 记住我们前面设置的两个连接字符串? AzureWebJobsDashboard和AzureWebJobsStorage定义了WebJob存储日志文件的位置. AzureWebJobsDashboard主要被AzureWebJob SDK用来存储来自WebJobsDashboard的日志. AzureWebJobsStorage应该指向存储日志的存储帐户. WebJob运行时在这个存储帐户中创建两个容器,名称分别为“azure-job -宿主-output”和“azure-webjobs-宿主”. 您可以通过转到存储帐户并在服务下选择Blobs来查看容器.

azure-jobs-宿主-output容器拥有WebJob运行时在每次执行的初始化和终止期间创建的日志. azure-webjobs-宿主s登录到几个文件夹中. heartbeat包含心跳服务的日志, id包含服务的唯一标识符的日志,输出日志包含服务每次运行时的显式日志输出. 输出日志文件夹是WebJob输出日志的地方.

要获取日志文件,您需要安装 Azure存储资源管理器 你可以免费下载吗. 一旦您安装并运行它,它将要求您的Azure凭据. 这些就绪之后,您可以深入到输出日志文件夹. 从那里您可以下载一个日志文件并查看WebJob日志输出.

我在这个设置中遇到的一个问题是,当我需要对WebJob进行故障排除时,没有简单的方法来获取特定日期和时间的日志文件. 实现日志记录以便找到日期和时间的日志文件的一种方法是启用web应用程序日志记录. 转到应用程序服务,选择诊断日志,然后单击应用程序日志(Blob)下的on. 系统将提示您选择一个存储容器和保留期.

为Application日志记录创建的日志文件是CSV格式的. 比这更好, they are created in a folder structure of // / so you can find a 日志 file for the exact date and time you want to view.

结论

当您需要基于云的服务时, Azure为您提供了几个选择,Azure WebJobs是您应该考虑的一个. 如果你已经为现有的应用服务付费,那么WebJobs就很有意义. 因为WebJobs基本上是控制台应用程序, 一旦您配置了日志记录,开发一个日志记录是非常容易的, 监控它们很容易.

将遗留应用程序迁移到云

想象一下,不再需要升级、保护和维护服务器. 想象一下简单的应用程序升级. 我们可以帮助. 今天和我们谈谈!

约翰Hadzima
约翰Hadzima核心因素

约翰Hadzima是博悦注册登录的解决方案架构师和团队领导,也是微软认证的解决方案开发人员. 他在Hampton Roads做了20多年的开发人员,从事各种语言和数据库的开发工作,偶尔也会开发手机应用. 约翰喜欢冲浪、骑公路自行车、打高尔夫球,他的两个儿子使他忙得不可开交.

让我们来谈谈你的项目.

我们是一家提供全方位IT和数字营销服务的公司. 我们相信,成功的项目是与我们的客户合作和透明的结果. 您是否正在为您的网站或应用程序寻找更好的用户体验? 需要有经验的数据库架构师或业务分析师? 让我们谈谈!

X