0

私の質問を明確にします。

html を提供するフロントエンドと、フロントエンドにデータを提供するバックエンドの 2 つのシステムを統合するタスクがあります。バックエンドには非常に大きな REST API があるため、複数のルートを使用する必要があります。単一のキャメル コンテキストを使用し、すべてのルートをそれにラップすることを計画しました。

<camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
    <from uri="direct:data"/>
    <to uri="ahc:http://localhost/data"/>
    <!--And so on. More than 70 routes-->
</camelContext>

次に、 Hiding middleware の記事でアドバイスされているように、サービス メソッドで @Produce アノテーションを使用してルートを呼び出すことを計画しました。

public interface Service {
    String data();
}

public class MyBean {
    @Produce(uri = "direct:data")
    protected Service producer;

    public void doSomething() {
        // lets send a message
        String response = producer.data();
    }
}

herehereから取得した情報を理解すると、アプリに追加の 70 スレッド (ルートごとに 1 つ) が作成されます。パフォーマンスに重大な影響を与える可能性があり、バックエンド API が大きくなるにつれてスレッド数も大きくなるのではないかと心配しています。それが正しいか?それが本当ならどうすればこれを避けることができますか?私が理解しているように、この場合 ExecutorService スレッド プールを使用することはできません。

ご回答ありがとうございます。

4

1 に答える 1

5

いいえ、ルートごとにスレッドが作成されることはありません。スレッド化モジュールは、多くの場合、コンシューマーのスレッド化モデル (ルート入力など) に関連付けられています。

たとえば、タイマー コンポーネントを使用するルートは、スケジュールされたスレッド プール (1 スレッド) を使用します。また、JMS コンポーネントは、concurrentConsumers=N などを設定するかどうかに応じて、1 つ以上のスレッドを使用します。

直接コンポーネントは直接メソッド呼び出しに似ており、呼び出し元スレッドを使用するため、そのスレッド モデルの新しいスレッドは 0 です。

70 のルートすべてが < to > で AHC を使用している場合、同じエンドポイントを再利用したい場合があるため、AHC ライブラリのスレッド プールを再利用します。または、すべての AHC エンドポイントに使用される共有プールを構成する代わりに。

ところで、この質問は Camel ユーザー フォーラム / メーリング リストにも投稿されました。 -tp5736620.html

于 2013-08-01T08:24:17.390 に答える