【问题标题】:Converting console application to Azure webjobs将控制台应用程序转换为 Azure Webjobs
【发布时间】:2014-09-12 06:15:22
【问题描述】:

我有兴趣使用 WebJobs 来替换我现有的控制台应用程序。控制台应用程序使用 /argument 样式语法接受 5 个参数中的 1 个,我目前在我的 VM 上使用 Windows 调度程序运行该语法。每个计划都使用特定参数运行应用程序。有些作业每 5 分钟运行一次,有些作业每 6 小时运行一次。

当我上传包含控制台应用程序及其依赖项的 ZIP 时,我希望能够为应用程序提供命令行参数。情况似乎并非如此。

例如,如果我创建一个批处理文件(称为 Send-Emails.bat),然后创建一个名为 Send-Emails 的新 WebJob,它似乎会运行该批处理文件。这没关系,但这意味着我需要创建 5 个不同的 WebJobs(同样,这不是问题)并上传 ZIP 5 次,每个都有一个不同的批处理文件,该批处理文件使用参数调用控制台。

这最后一步似乎效率很低,很快就会成为维护的噩梦。如何部署这样的系统也会产生问题。

这似乎是一个基本场景,我假设 Azure 团队为其设计了 WebJobs。有没有人在这方面取得任何成功?如果可能的话,我宁愿不更改我的代码,并且使用 API 从我的 Web 应用程序调用 WebJobs 似乎也不太理想。

【问题讨论】:

    标签: .net azure console-application azure-webjobs


    【解决方案1】:

    几点建议:

    【讨论】:

    • 感谢您的回答马丁。对于一项作业,我的计划任务以不同的时间间隔运行(有些每 5 分钟运行一次,而另一些每 6 小时运行一次)。
    • 您可以使作业有状态,以记住上次运行不同任务的时间。然后,如果您每 5 分钟运行一次作业,它将每次运行不同的任务集。
    【解决方案2】:

    虽然由于仍然涉及调度程序,所以不是一个完美的解决方案,但下面的解决方案有一些优点。让我先描述一下它是如何工作的:

    您有一个使用 WebJobs SDK 的 WebJob。在这个工作中,你有 5 个不同的功能,一个用于你想要的每个工作。这些函数中的每一个都侦听不同的存储队列。然后,您有 5 个调度程序(每个函数一个),它们会将消息放入与需要调用的函数相对应的队列中。

    此解决方案的优势在于,您可以在不触及工作代码的情况下更改功能的日程安排,并且您可以将所有工作/功能集中在一个地方。

    这里是 webjob 的一些示例代码:

    public static void Main()
    {
        using (JobHost host = new JobHost())
        {
            host.RunAndBlock();
        }
    }
    
    public static void SendEmailFunction(
        [QueueTrigger("send-email-function-trigger")] string message,
        TextWriter log,
    {
        log.WriteLine("sending an email");
        // Send email
    }
    
    public static void DoSomethingElse(
        [QueueTrigger("do-something-else-trigger")] string message
        TextWriter log)
    {
        log.WriteLine("Doing something else");
    }
    
    // ... more functions ...
    

    然后,如果您有一个 SendEmail 调度程序,将消息放入“send-email-function-trigger”,SendEmailFunction 将被触发。


    另一个选择是使用一些环境变量而不是命令行参数。根据您在特定环境变量中查找参数值的作业名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 2012-03-09
      相关资源
      最近更新 更多