我有一个向Azure服务总线主题发布消息的系统。主题有多个订阅者,我正在编写一个webJob来处理消息。
当我在Visual中关心一个新的WebJob项目时,我会得到一个名为'Functions.cs‘的类,它有检查队列的代码。我已经更新了代码,以检查主题中的订阅:
public static void ProcessTopicMessage([ServiceBusTrigger("topic-name", "subscription-name")] string message, TextWriter log)
{
// Processing goes here
}该主题有多个订阅,我需要监视这些订阅,然后对接收到的每个消息执行不同的操作。这将涉及通过API连接到第三方服务,API是每个订阅的不同API。
示例:
topic-name
subscription-1 // Perform action #1
subscription-2 // Perform action #2
subscription-3 // Perform action #3
...我的问题是:我应该为每个订阅编写一个单独的WebJob,还是应该在'Functions.cs‘类中添加其他方法?
我想知道,如果在同一个WebJob中有多个方法,那么性能是否会降低,以及是否需要使这些方法异步。
发布于 2016-12-14 07:35:39
我的问题是:我应该为每个订阅编写一个单独的WebJob,还是应该在'Functions.cs‘类中添加其他方法?
根据您的要求,您有多个订阅,它们订阅相同的主题,每个订阅具有处理相同消息的不同逻辑。
据我理解,由于多个订阅共享相同的配置( Azure ServiceBus的App),每个订阅处理类似的逻辑。多个函数可以重用同一主机,该主机可以缩放为多个实例。我假设同一个WebJob中的多个函数对您来说是一种更好的方法。
我想知道,如果在同一个WebJob中有多个方法,那么性能是否会降低,以及是否需要使这些方法异步。
正如我所知,当您的函数被触发时,JobHost将从托管线程池启动一个线程。您可以将并发调用的最大数量配置为处理来自ServiceBus的消息,如下所示:
ServiceBusConfiguration.MessageOptions.MaxConcurrentCalls=20 //16 by default因为您将调用第三方API,所以可以将您的函数标记为异步的,以提高WebJob的可伸缩性。另外,还有一个关于异步性能的issue,您可以参考它。
发布于 2016-12-15 06:01:32
为每个订阅创建一个web作业或为所有用户创建一个web作业取决于您的需求。
例:
处理一个请求需要多长时间?
回答这个问题将决定多个订阅是否会对性能产生很大影响。
这一次有SLA吗?
如果您对每个请求都有SLA,那么您可能需要为每个订阅将web作业缩放为不同的作业,否则,就足够了。
对每个订阅有什么特殊的配置吗?
如果所有订阅共享相同的连接、配置,则每个订阅可能不需要单独的web作业。
您还可以使用策略模式,并将每个订阅移动到自己的类中,以实现每个类的特定逻辑。
https://stackoverflow.com/questions/41125310
复制相似问题