2

Azure Service Bus トピックにメッセージを投稿するシステムがあります。トピックには複数のサブスクライバーがあり、メッセージを処理するための 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 に複数のメソッドがあり、メソッドを非同期にする必要がある場合、パフォーマンスが低下するのではないかと考えています。

4

2 に答える 2

1

私の質問は、サブスクリプションごとに個別の WebJob を作成する必要があるか、それとも「Functions.cs」クラスにメソッドを追加する必要があるかということです。

要件によると、同じトピックをサブスクライブする複数のサブスクリプションがあり、各サブスクリプションには同じメッセージを処理するための異なるロジックがあります。

私の理解では、複数のサブスクリプションが同じ構成 (Azure ServiceBus のアプリ設定) を共有し、各サブスクリプションが同様のロジックを処理するためです。複数の関数が、複数のインスタンスにスケーリングできる同じホストを再利用できます。同じ WebJob 内の複数の関数がより良いアプローチであると想定しました。

同じ WebJob に複数のメソッドがあり、メソッドを非同期にする必要がある場合、パフォーマンスが低下するのではないかと考えています。

私が知っているようにJobHost、関数がトリガーされると、マネージド スレッド プールからスレッドが開始されます。次のように、ServiceBus からのメッセージを処理する同時呼び出しの最大数を構成できます。

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

サード パーティの API を呼び出すため、関数を非同期としてマークして、Web ジョブのスケーラビリティを向上させることができます。また、パフォーマンスの async に関する問題もあります。参照できます。

于 2016-12-14T07:35:39.087 に答える