【问题标题】:Should I use one or multiple Azure WebJobs我应该使用一个还是多个 Azure WebJobs
【发布时间】:2016-12-15 14:01:32
【问题描述】:

我有一个将消息发布到 Azure 服务总线主题的系统。该主题有多个订阅者,我正在编写一个 webJob 来处理消息。

当我在 Visual Studio 中处理一个新的 WebJob 项目时,我得到了一个名为“Functions.cs”的类,其中包含检查队列的代码。我已更新代码以检查主题内的订阅:

public static void ProcessTopicMessage([ServiceBusTrigger("topic-name", "subscription-name")] string message, TextWriter log)
{
    // Processing goes here
}

该主题有多个订阅,我需要对其进行监控,然后对收到的每条消息执行不同的操作。这将涉及通过 API 连接到第三方服务,每个订阅都有不同的 API。

例子:

topic-name
    subscription-1  // Perform action #1
    subscription-2  // Perform action #2
    subscription-3  // Perform action #3
    ...

我的问题是:我应该为每个订阅编写单独的 WebJob 还是应该在“Functions.cs”类中添加其他方法?

我想知道如果我在同一个 WebJob 中有多个方法以及是否需要使这些方法异步,性能是否会降低。

【问题讨论】:

标签: c# azure azure-webjobs azure-servicebus-topics


【解决方案1】:

我的问题是:我应该为每个订阅编写一个单独的 WebJob 还是应该在“Functions.cs”类中添加其他方法?

根据您的要求,您有多个订阅,它们订阅相同的主题,并且每个订阅有不同的逻辑来处理相同的消息。

据我了解,由于多个订阅共享相同的配置(Azure ServiceBus 的应用程序设置)并且每个订阅处理类似的逻辑。多个功能可以重用可以扩展到多个实例的同一主机。我认为同一个 WebJob 中的多个函数对您来说是更好的方法。

我想知道如果我在同一个 WebJob 中有多个方法以及是否需要使这些方法异步,性能是否会降低。

据我所知,JobHost 会在您的函数被触发时从托管线程池中启动一个线程。您可以配置最大并发调用数来处理来自 ServiceBus 的消息,如下所示:

ServiceBusConfiguration.MessageOptions.MaxConcurrentCalls=20 //16 by default

由于您将调用第三方 API,因此您可以将您的函数标记为异步,以提高 WebJob 的可扩展性。另外,还有一个关于异步性能的issue,你可以参考一下。

【讨论】:

    【解决方案2】:

    为每个订阅创建一个 Web 作业或为所有人创建一个 Web 作业取决于您的要求。

    例如:

    处理请求需要多长时间?

    回答这个问题将确定多个订阅是否会对性能产生重大影响

    这次有 SLA 吗?

    如果您对每个请求都有一个 SLA,那么您可能需要为每个订阅将 Web 作业扩展为不同的,否则,一个就足够了

    每个订阅有什么特殊配置吗?

    如果所有订阅共享相同的连接、配置,那么您可能不需要为每个订阅单独的 Web 作业。

    您也可以使用策略模式,并将每个订阅移动到自己的类中,以实现每个订阅的特定逻辑

    【讨论】:

      猜你喜欢
      • 2015-03-28
      • 1970-01-01
      • 2018-09-03
      • 2011-10-17
      • 2016-11-18
      • 2021-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      相关资源
      最近更新 更多