首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该使用一个或多个Azure WebJobs

我应该使用一个或多个Azure WebJobs
EN

Stack Overflow用户
提问于 2016-12-13 15:56:40
回答 2查看 1.3K关注 0票数 2

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

当我在Visual中关心一个新的WebJob项目时,我会得到一个名为'Functions.cs‘的类,它有检查队列的代码。我已经更新了代码,以检查主题中的订阅:

代码语言:javascript
复制
public static void ProcessTopicMessage([ServiceBusTrigger("topic-name", "subscription-name")] string message, TextWriter log)
{
    // Processing goes here
}

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

示例:

代码语言:javascript
复制
topic-name
    subscription-1  // Perform action #1
    subscription-2  // Perform action #2
    subscription-3  // Perform action #3
    ...

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-14 07:35:39

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

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

据我理解,由于多个订阅共享相同的配置( Azure ServiceBus的App),每个订阅处理类似的逻辑。多个函数可以重用同一主机,该主机可以缩放为多个实例。我假设同一个WebJob中的多个函数对您来说是一种更好的方法。

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

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

代码语言:javascript
复制
ServiceBusConfiguration.MessageOptions.MaxConcurrentCalls=20 //16 by default

因为您将调用第三方API,所以可以将您的函数标记为异步的,以提高WebJob的可伸缩性。另外,还有一个关于异步性能的issue,您可以参考它。

票数 1
EN

Stack Overflow用户

发布于 2016-12-15 06:01:32

为每个订阅创建一个web作业或为所有用户创建一个web作业取决于您的需求。

例:

处理一个请求需要多长时间?

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

这一次有SLA吗?

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41125310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档