第40章 Endpoint インターフェイス
概要
本章では、Apache Camel コンポーネントの実装における必須ステップである Endpoint インターフェイスを実装する方法を説明します。
40.1. Endpoint インターフェイス
概要
org.apache.camel.Endpoint タイプのインスタンスはエンドポイント URI をカプセル化します。また、Consumer
、Producer
、Exchange
オブジェクトのファクトリーとしても機能します。エンドポイントを実装するには、以下の 3 つの方法があります。
- イベント駆動型
- スケジュールされたポーリング
- ポーリング
これらのエンドポイント実装パターンは、コンシューマーの実装に対応するパターンを補完します。「Consumer インターフェイスの実装」 を参照してください。
図40.1「コンシューマー継承階層」 は、Endpoint
継承階層を設定する、関連のある Java インターフェイスとクラスを示しています。
図40.1 コンシューマー継承階層
Endpoint インターフェイス
例40.1「Endpoint インターフェイス」 は、org.apache.camel.Exchange インターフェースの定義を示しています。
例40.1 Endpoint インターフェイス
package org.apache.camel; public interface Endpoint { boolean isSingleton(); String getEndpointUri(); String getEndpointKey(); CamelContext getCamelContext(); void setCamelContext(CamelContext context); void configureProperties(Map options); boolean isLenientProperties(); Exchange createExchange(); Exchange createExchange(ExchangePattern pattern); Exchange createExchange(Exchange exchange); Producer createProducer() throws Exception; Consumer createConsumer(Processor processor) throws Exception; PollingConsumer createPollingConsumer() throws Exception; }
エンドポイントメソッド
Endpoint インターフェイスは以下のメソッドを定義します。
-
isSingleton()
: 各 URI が CamelContext 内の単一のエンドポイントにマップされるように保証する場合には、true
を返します。このプロパティーがtrue
の場合、ルート内の同一 URI への複数の参照は常に 単一の エンドポイントインスタンスを参照します。一方、このプロパティーがfalse
の場合、ルート内の同じ URI への複数の参照は 個別の エンドポイントインスタンスを参照します。ルートで URI を参照するたびに、新しいエンドポイントインスタンスが作成されます。 -
getEndpointUri()
: このエンドポイントのエンドポイント URI を返します。 -
getEndpointKey()
− エンドポイントを登録する際に、org.apache.camel.spi.LifecycleStrategy
によって使用されます。 -
getCamelContext()
: このエンドポイントが属するCamelContext
インスタンスへの参照を返します。 -
setCamelContext()
: このエンドポイントが属するCamelContext
インスタンスへの参照を返します。 -
configureProperties()
: 新規にConsumer
インスタンスを作成する時にパラメーターの挿入に使用されるパラメーターマップのコピーを保存します。 -
isLenientProperties()
:true
の場合は URI が不明なパラメーターを含むことができることを示します (つまり、エンドポイントまたはConsumer
クラスに注入できないパラメーターです)。通常、このメソッドはfalse
を返すために実装する必要があります。 createExchange()
: 以下のバリアントを持つオーバーロードされたメソッド。-
Exchange createExchange()
: デフォルトの交換パターン設定を使用して、新規のエクスチェンジインスタンスを作成します。 -
Exchange createExchange(ExchangePattern pattern)
- 指定されたエクスチェンジパターンで新しいエクスチェンジインスタンスを作成します。 -
Exchange createExchange(Exchange exchange)
- 指定されたexchange
引数を、このエンドポイントに必要なエクスチェンジのタイプに変換します。指定のエクスチェンジがまだ正しいタイプでない場合、このメソッドはこれを正しいタイプの新規インスタンスにコピーします。このメソッドのデフォルト実装はDefaultEndpoint
クラスにあります。
-
-
createProducer()
: 新しいProducer
インスタンスを作成するために使用されるファクトリーメソッド。 -
createConsumer()
: イベント駆動型のコンシューマーインスタンスを新たに作成するためのファクトリーメソッド。processor
引数は、ルートの最初のプロセッサーへの参照です。 -
createPollingConsumer()
: 新しいポーリングコンシューマーインスタンスを作成するためのファクトリーメソッド。
エンドポイントシングルトン
不要なオーバーヘッドを避けるために、同じ URI (CamelContext 内) を持つすべてのエンドポイントに 単一 のエンドポイントインスタンスを作成することが推奨されます。isSingleton()
を実装して true
を返すことにより、この条件を強制することができます。
このコンテキストでは、同じ URI は文字列の等価を使用して 2 つの URI が同じであることを意味します。原則では、異なる文字列で表されますが、同等の URI を 2 つ持つことができます。この場合、URI は同じものとして処理されません。