検索

179.6. 独自の Camel コードに JMX を使用する

download PDF

179.6.1. 独自のマネージドエンドポイントの登録

Camel 2.0 以降で利用可能
独自のエンドポイントを Spring マネージドアノテーション @ManagedResource で装飾して、それらを Camel MBeanServer に登録し、JMX を使用してカスタム MBean にアクセスできるようにすることができます。

注記

Camel 2.1 では、これをエンドポイント以外にも適用するように変更しましたが、インターフェイス org.apache.camel.spi.ManagementAware も実装する必要があります。これについては後で詳しく説明します。

たとえば、管理するオプションを定義する次のカスタムエンドポイントがあります。

@ManagedResource(description = "Our custom managed endpoint")
public class CustomEndpoint extends MockEndpoint implements ManagementAware<CustomEndpoint> {

    public CustomEndpoint(final String endpointUri, final Component component) {
        super(endpointUri, component);
    }

    public Object getManagedObject(CustomEndpoint object) {
        return this;
    }

    public boolean isSingleton() {
        return true;
    }

    protected String createEndpointUri() {
        return "custom";
    }

    @ManagedAttribute
    public String getFoo() {
        return "bar";
    }

    @ManagedAttribute
    public String getEndpointUri() {
        return super.getEndpointUri();
    }
}

Camel 2.9 以降では、org.apache.camel.api.management パッケージの @ManagedResource@ManagedAttribute、および @ManagedOperation を使用することが推奨されています。これにより、カスタムコードは Spring JAR に依存しなくなります。

179.6.2. 独自のマネージドサービスのプログラミング

Camel 2.1 以降で利用可能

Camel は、管理のためにサービスを登録するときに、独自の MBean を使用できるようになりました。つまり、たとえば、カスタム Camel コンポーネントを開発し、エンドポイント、コンシューマー、プロデューサーなどの MBean を公開することができます。インターフェイス org.apache.camel.spi.ManagementAware を実装し、Camel が使用する管理対象オブジェクトを返すだけです。

JMX API は本当に苦痛で酷いものだと考える前に、実際にそうです。Spring にとっても幸運なことに、既存の Bean の管理をエクスポートするために使用できるさまざまなアノテーションが作成されました。つまり、これを頻繁に使用し、ManagementAware インターフェイスから getManagedObjectthis を返すだけです。例については、CustomEndpoint を使用した上記のコード例を参照してください。

現在、Camel 2.1 では、Camel が管理のために登録するすべてのオブジェクトに対してこれを行うことができますが、これはすべてではありません。

この ManagementAware インターフェイスを実装しないサービスの場合、Camel は以下の表で定義されているデフォルトのラッパーを使用するようにフォールバックします。

タイプMBean ラッパー

CamelContext

ManagedCamelContext

コンポーネント

ManagedComponent

エンドポイント

ManagedEndpoint

コンシューマー

ManagedConsumer

Producer

ManagedProducer

ルート

ManagedRoute

プロセッサー

ManagedProcessor

トレーサー

ManagedTracer

サービス

ManagedService

それに加えて、次のような特殊なタイプの拡張ラッパーがいくつかあります。

タイプMBean ラッパー

ScheduledPollConsumer

ManagedScheduledPollConsumer

BrowsableEndpoint

ManagedBrowseableEndpoint

Throttler

ManagedThrottler

Delayer

ManagedDelayer

SendProcessor

ManagedSendProcessor

将来的には、より多くの EIP パターンのラッパーを追加する予定です。

179.6.3. ManagementNamingStrategy

Camel 2.1 以降で利用可能

Camel は、org.apache.camel.spi.ManagementNamingStrategy による命名戦略のためのプラグ可能な API を提供します。デフォルトの実装は、すべての MBean が登録されている MBean 名を計算するために使用されます。

179.6.4. 管理命名パターン

Camel 2.10 以降で利用可能

Camel 2.10 以降では、MBean の命名パターンを簡単に設定できるようになりました。パターンは、ドメイン名の後にキーとして ObjectName の一部として使用されます。

デフォルトでは、Camel は次のように ManagedCamelContextMBean の MBean 名を使用します。

org.apache.camel:context=localhost/camel-1,type=context,name=camel-1

また、Camel 2.13 以降では、ホスト名は MBean 名に含まれていないため、上記の例は次のようになります。

org.apache.camel:context=camel-1,type=context,name=camel-1

CamelContext で名前を設定すると、その名前も ObjectName の一部になります。たとえば、

<camelContext id="myCamel" ...>

MBean 名は次のようになります。

org.apache.camel:context=localhost/myCamel,type=context,name=myCamel

上記の指定された名前の MBean がすでに存在するなど、JVM で名前の競合が発生した場合、Camel はデフォルトで、カウンターを使用して JMXMBeanServer で新しいフリーネームを見つけてこれを自動修正しようとします。以下に示すように、カウンターが追加されたので、ObjectName の一部として myCamel-1 があります。

org.apache.camel:context=localhost/myCamel-1,type=context,name=myCamel

これが可能なのは、Camel がデフォルトで次のトークンをサポートする命名パターンを使用しているためです。

  • camelId = the CamelContext id (eg the name)
  • name - camelId と同じ
  • counter - 増分カウンター * bundleId - OSGi バンドル ID (OSGi 環境のみ)
  • symbolicName - OSGi シンボリック名 (OSGi 環境のみ)
  • version - OSGi バンドルのバージョン (OSGi 環境のみ)

デフォルトの命名パターンは、OSGi と非 OSGi で次のように区別されます。

  • 非 OSGI: name
  • OSGi: bundleId-name
  • OSGi Camel 2.13: symbolicName

ただし、JMXMBeanServer に名前の競合がある場合、Camel は自動的にフォールバックし、パターン内の counter を使用してこれを修正します。したがって、次のパターンが使用されます。

  • 非 OSGI: name-counter
  • OSGi: bundleId-name-counter
  • OSGi Camel 2.13: symbolicName-counter

明示的な命名パターンを設定すると、そのパターンが常に使用され、上記のデフォルトパターンは使用され ません

これにより、レジストリーの CamelContext id と JMXMBeanRegistry の JMX MBean の両方の命名を非常に簡単に完全に制御できます。

Camel 2.15 以降では、JVM システムプロパティーを使用してデフォルトの管理名パターンを設定し、これを JVM に対してグローバルに設定できます。以下の例に示すように、このパターンを明示的に設定することでオーバーライドできることに注意してください。

JVM システムプロパティーを設定して、名前の前に cool を付けたデフォルトの管理名パターンを使用します。

System.setProperty(JmxSystemPropertyKeys.MANAGEMENT_NAME_PATTERN, "cool-#name#");

したがって、CamelContext の 両方に明示的な名前を付け、変更されない (たとえば、カウンターがない) 固定の MBean 名を使用する場合は、新しい managementNamePattern 属性を使用できます。

<camelContext id="myCamel" managementNamePattern="#name#">

その場合、MBean 名は常に次のようになります。

org.apache.camel:context=localhost/myCamel,type=context,name=myCamel

Java では、次のように managementNamePattern を設定できます。

context.getManagementNameStrategy().setNamePattern("#name#");

managementNamePattern で id とは異なる名前を使用することもできます。たとえば、次のようにできます。

<camelContext id="myCamel" managementNamePattern="coolCamel">

OSGi バンドル ID を MBean 名の一部として使用したくない場合は、OSGi 環境でこれを行うことができます。OSGi バンドル ID は、サーバーを再起動するか、同じアプリケーションをアンインストールしてインストールすると変更される可能性があるためです。OSGi バンドル ID を名前の一部として使用しないようにするには、次のようにします。

<camelContext id="myCamel" managementNamePattern="#name#">

これには、myCamel が JVM 全体で一意である必要があることに注意してください。同じ CamelContext id と managementNamePattern を持つ 2 番目の Camel アプリケーションをインストールすると、Camel は起動時に失敗し、MBean がすでに存在する例外を報告します。

179.6.5. ManagementStrategy

Camel 2.1 以降で利用可能

Camel は、完全にプラグ可能な管理ストラテジーを提供するようになり、管理を 100% 制御できるようになりました。これは、管理のための多くの方法を備えた豊富なインターフェイスです。管理対象オブジェクトを MBeanServer に追加および削除するためだけでなく、org.apache.camel.spi.EventNotifier API を使用してイベント通知も提供されます。たとえば、他の管理製品へのアダプターの提供を容易にします。さらに、Apache ですぐに提供される詳細と機能を提供することもできます。

179.6.6. パフォーマンス統計情報の粒度レベルの設定

Camel 2.1 以降で利用可能

Camel の起動時にパフォーマンス統計情報が有効かどうかに関係なく、事前に設定されたレベルを設定できるようになりました。レベルは

  • Extended - デフォルトですが、エンドポイントの使用状況のきめ細かいレベルなど、実行時に追加の統計が収集されます。このオプションには Camel 2.16 が必要です
  • All / Default - Camel は、ルートとプロセッサーの両方の統計情報を有効にします (きめ細かい)。Camel 2.16 以降、All オプションの名前が Default に変更されました。
  • RoutesOnly - Camel はルートの統計情報のみを有効にします (あらい粒度)
  • オフ - Camel は統計情報を有効にしません。

Camel 2.9 以降、パフォーマンス統計情報には、CamelContext および Route MBean ごとの平均負荷統計情報も含まれます。統計は、1 分、5 分、および 15 分あたりのレートでの、進行中のエクスチェンジの数に基づく平均負荷です。これは、Unix システムの負荷統計情報に似ています。Camel 2.11 以降では、<jmxAgent>loadStatisticsEnabled=false を設定することにより、負荷パフォーマンス統計情報を明示的に無効にすることができます。静的レベルもオフに設定されている場合はオフになることに注意してください。Camel 2.13 以降、ロードパフォーマンス統計情報はデフォルトで無効になっています。これを有効にするには、<jmxAgent>loadStatisticsEnabled=true を設定します。

実行時に、管理コンソール (JConsole など) を使用して、特定のルートまたはプロセッサーの統計情報が有効かどうかをいつでも変更できます。

注記

統計情報が有効になっているとはどういう意味ですか?

Statistics enabled は、Camel がその特定の MBean の詳細なパフォーマンス統計情報を行うことを意味します。表示できる統計情報は、完了/失敗した交換の数、最後/合計/最小/最大/平均処理時間、最初/最後に失敗した時間など、多数あります。

Java DSL を使用して、次の方法でこのレベルを設定します。

// only enable routes when Camel starts
context.getManagementStrategy().setStatisticsLevel(ManagementStatisticsLevel.RoutesOnly);

そして、Spring DSL から次のことを行います。

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <jmxAgent id="agent" statisticsLevel="RoutesOnly"/>
 ...
</camelContext>
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.