c# - 我应该使用一个还是多个 Azure WebJobs

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

我有一个将消息发布到 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 中有多个方法并且需要使这些方法异步,性能是否会降低。

最佳答案

My question is: Should I write a separate WebJob for each subscription or should I add additional methods into the 'Functions.cs' class?

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

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

I wonder if the performance will reduce if I have multiple methods in the same WebJob and if I need to make the methods asynchronous.

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

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

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

关于c# - 我应该使用一个还是多个 Azure WebJobs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41125310/

相关文章:

azure - 逻辑应用标准自动化跨环境工作流引用

Azure 计划 Web 作业有时会触发两次

Azure WebJobs 大小限制

azure - 是否可以从 Azure Web 作业进行 API 调用?

c# - 将 ASP.Net Core 3 预览版 6 发布到 Azure

c# - 使用 TDD 和 C# 设计的开源项目?

sql-server - 为什么我的客户端IP地址每次显示不同的IP?

python - 从 Azure Databricks 读取时,已安装的 Azure 存储在文件夹内显示 mount.err

c# - ORM 和图层

C# 大型 JSON 转字符串导致内存不足异常