HSF アプリケーションの API 操作の中で、主要な API 操作は、プロバイダー Bean とコンシューマー Bean の作成に関連する操作です。
背景情報
ユースケースに基づいて 4 つの操作クラスが提供されます。
com.taobao.hsf.app.api.util.HSFApiProviderBean: API プログラミング方式を使用してプロバイダー Bean を作成します。
com.taobao.hsf.app.api.util.HSFApiConsumerBean: API プログラミング方式を使用してコンシューマー Bean を作成します。
com.taobao.hsf.app.spring.util.HSFSpringProviderBean: Spring 構成方式を使用してプロバイダー Bean を作成します。
com.taobao.hsf.app.spring.util.HSFSpringConsumerBean: Spring 構成方式を使用してコンシューマー Bean を作成します。
HSFSpringXxxBean の構成プロパティは、HSFApiXxxBean のセッターメソッドに対応しています。以下の内容は、プロバイダー Bean とコンシューマー Bean の側面から 4 つの API 操作クラスについて説明します。
依存関係情報
pom.xml ファイルに次の依存関係を追加します。
<dependency>
<groupId>com.alibaba.edas</groupId>
<artifactId>edas-sdk</artifactId>
<version>{version}</version>
</dependency>
ProviderBean
API プログラミング方式 - HSFApiProviderBean
com.taobao.hsf.app.api.util.HSFApiProviderBean を構成および初期化することで、HSF サービスを公開できます。
同じサービスに対して com.taobao.hsf.app.api.util.HSFApiProviderBean の構成と初期化プロセスは一度だけ実行されます。オブジェクトは複雑であるため、HSFApiProviderBean オブジェクトをキャッシュすることをお勧めします。
サンプルコード
// プロバイダー Bean をインスタンス化して構成します。 HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean(); hsfApiProviderBean.setServiceInterface("com.taobao.hsf.test.HelloWorldService"); hsfApiProviderBean.setTarget(target); // target は、serviceInterface で指定された操作の実装オブジェクトを示します。 hsfApiProviderBean.setServiceVersion("1.0.0"); hsfApiProviderBean.setServiceGroup("HSF"); // サービス公開のためにプロバイダー Bean を初期化します。 hsfApiProviderBean.init();
構成可能なプロパティテーブル
上記のサンプルコードで指定されているプロパティに加えて、HSFApiProviderBean には他にも多くの構成可能なプロパティが含まれています。対応するセッターメソッドを使用してこれらのプロパティを構成できます。
プロパティ名
タイプ
必須
デフォルト値
説明
serviceInterface
String
はい
なし
HSF サービスを提供するために使用される操作を指定します。コンシューマーはこのプロパティを使用してサービスをサブスクライブします。
target
Object
はい
なし
serviceInterface で指定された操作のサービス実装オブジェクトを指定します。
serviceVersion
String
いいえ
1.0.0
サービスのバージョン番号を指定します。コンシューマーはこのプロパティを使用してサービスをサブスクライブします。
serviceGroup
String
いいえ
HSF
サービスのグループを指定します。コンシューマーはこのプロパティを使用してサービスをサブスクライブします。
serviceDesc
String
いいえ
なし
管理を容易にするために、サービスの説明を指定します。
clientTimeout
int
いいえ
3000
応答タイムアウト期間を指定します。単位:ミリ秒。プロバイダーがタイムアウト期間内に応答を返さない場合、HSFTimeOutException がスローされます。
methodSpecials
MethodSpecial[]
いいえ
なし
サービス内の一部のメソッドの応答タイムアウト期間を指定します。MethodSpecial.methodName パラメーターをメソッド名として指定し、MethodSpecial.clientTimout パラメーターを現在のメソッドのタイムアウト期間として指定します。このプロパティは、現在のプロバイダーの clientTimeout よりも優先されます。
preferSerializeType
String
いいえ
hessian2
HSF2 のサービスリクエストパラメーターとサービス応答結果のシリアル化方法を指定します。有効な値:java、hessian、hessian2、json、kryo。
corePoolSize
値が整数の String
いいえ
0
サービス用に個別のスレッドプールを構成し、アクティブスレッドの最小数を指定します。デフォルトでは、このプロパティが指定されていない場合、HSF プロバイダーのパブリックスレッドプールが使用されます。
maxPoolSize
値が整数の String
いいえ
0
サービス用に個別のスレッドプールを構成し、アクティブスレッドの最大数を指定します。デフォルトでは、このプロパティが指定されていない場合、HSF プロバイダーのパブリックスレッドプールが使用されます。
Spring 構成方式 - HSFSpringProviderBean
Spring プロファイルで com.taobao.hsf.app.spring.util.HSFSpringProviderBean クラスの Bean を構成することで、HSF サービスを公開できます。
サンプルコード
<bean id="helloWorldService" class="com.taobao.hsf.test.HelloWorldService" /> <bean class="com.taobao.hsf.app.spring.util.HSFSpringProviderBean" init-method="init"> <! -- [必須] 外部に提供する HSF サービスで使用する操作を指定します。 --> <property name="serviceInterface" value="com.taobao.hsf.test.HelloWorldService" /> <! -- [必須] serviceInterface で指定された操作のサービス実装オブジェクトを指定します。具体的には、オブジェクトは公開される HSF サービスの Spring Bean ID です。 --> <property name="target" ref="helloWorldService" /> <! -- [オプション] サービスのバージョン番号を指定します。デフォルト値は 1.0.0 です。 --> <property name="serviceVersion" value="1.0.0" /> <! -- [オプション] サービスが属するグループを指定します。デフォルト値は HSF です。 --> <property name="serviceGroup" value="HSF" /> <! -- [オプション] 管理を容易にするために、サービスの説明を指定します。デフォルト値は null です。 --> <property name="serviceDesc" value="HelloWorldService providered by HSF" /> <! -- [オプション] 応答タイムアウト期間をミリ秒単位で指定します。プロバイダーが指定された期間内に応答を返さない場合、HSFTimeOutException がスローされます。 --> <! -- デフォルト値は 3000 ミリ秒です。 --> <property name="clientTimeout" value="3000"/> <! -- [オプション] サービス内の一部のメソッドの応答タイムアウト期間を指定します。このプロパティは clientTimeout よりも優先されます。 --> <! -- MethodSpecial.methodName パラメーターをメソッド名として指定し、MethodSpecial.clientTimout パラメーターを現在のメソッドのタイムアウト期間として指定します。 --> <property name="methodSpecials"> <list> <bean class="com.taobao.hsf.model.metadata.MethodSpecial"> <property name="methodName" value="sum" /> <property name="clientTimeout" value="2000" /> </bean> </list> </property> <! -- [オプション] サービスのリクエストパラメーターと応答結果のシリアル化方法を指定します。有効な値:java、hessian、hessian2、json、kryo。 --> <! -- デフォルト値は hessian2 です。 --> <property name="preferSerializeType" value="hessian2"/> <! -- [オプション] サービス用に個別のスレッドプールを構成し、アクティブスレッドの最小数を指定します。デフォルトでは、このプロパティが指定されていない場合、HSF プロバイダーのパブリックスレッドプールが使用されます。 --> <property name="corePoolSize" value="10"/> <! -- [オプション] サービス用に個別のスレッドプールを構成し、アクティブスレッドの最大数を指定します。デフォルトでは、このプロパティが指定されていない場合、HSF プロバイダーのパブリックスレッドプールが使用されます。 --> <property name="maxPoolSize" value="60"/> </bean>
ConsumerBean
API プログラミング方式 - HSFApiConsumerBean
com.taobao.hsf.app.api.util.HSFApiConsumerBean を構成および初期化することで、HSF サービスをサブスクライブできます。
同じサービスに対して com.taobao.hsf.app.api.util.HSFApiConsumerBean の構成と初期化プロセスは一度だけ実行されます。
オブジェクトサイズが大きいため、HSFApiConsumerBean オブジェクトと取得した HSF エージェントをキャッシュすることをお勧めします。
説明HSF では、HSFApiConsumerBean はサービス構成をキャッシュします。サブスクライブされたサービスが複数回構成されている場合、最初の構成のみが有効になります。
サンプルコード
// コンシューマー Bean をインスタンス化して構成します。 HSFApiConsumerBean hsfApiConsumerBean = new HSFApiConsumerBean(); hsfApiConsumerBean.setInterfaceName("com.taobao.hsf.test.HelloWorldService"); hsfApiConsumerBean.setVersion("1.0.0"); hsfApiConsumerBean.setGroup("HSF"); // サービス サブスクリプションのためにコンシューマー Bean を初期化します。 // true はアドレスプッシュを待機することを示します(タイムアウト期間:3000 ミリ秒)。デフォルト値は false で、非同期呼び出しを示します。 hsfApiConsumerBean.init(true); // HSF エージェントを取得します。 HelloWorldService helloWorldService = (HelloWorldService) hsfApiConsumerBean.getObject(); // HSF 呼び出しを開始します。 String helloStr = helloWorldService.sayHello("Li Lei");
構成可能なプロパティテーブル
上記のサンプルコードで指定されているプロパティに加えて、HSFApiConsumerBean には他にも多くの構成可能なプロパティが含まれています。対応するセッターメソッドを使用してこれらのプロパティを構成できます。
プロパティ名
タイプ
必須
デフォルト値
説明
interfaceName
String
はい
なし
サービス サブスクリプションのインターフェース名を指定します。コンシューマーはこのプロパティを使用してサービスをサブスクライブします。
version
String
はい
なし
サブスクライブされたサービスのバージョン番号を指定します。コンシューマーはこのプロパティを使用してサービスをサブスクライブします。
group
String
はい
なし
サブスクライブされたサービスのグループを指定します。コンシューマーはこのプロパティを使用してサービスをサブスクライブします。
clientTimeout
int
いいえ
なし
リクエストタイムアウト期間を指定します。単位:ミリ秒。コンシューマーがプロバイダーから応答を受信しない場合、HSFTimeOutException がスローされます。コンシューマーに指定された clientTimeout は、プロバイダーに指定された clientTimeout よりも優先されます。コンシューマーに clientTimeout が指定されていない場合、リモートサービス呼び出し中にプロバイダーに指定された clientTimeout が使用されます。
methodSpecials
MethodSpecial[]
いいえ
なし
サービス内の一部のメソッドのリクエストタイムアウト期間を指定します。MethodSpecial.methodName パラメーターをメソッド名として指定し、MethodSpecial.clientTimout パラメーターをメソッドのタイムアウト期間として指定します。このプロパティは、現在のコンシューマーの clientTimeout よりも優先されます。
maxWaitTimeForCsAddress
int
いいえ
なし
Config Server がアドレスをプッシュするのを同期的に待機する時間を指定します。単位:ミリ秒。このプロパティは、アドレスがプッシュされる前にサービスが呼び出されたときに HSFAddressNotFoundException が発生するのを防ぎます。待機時間の要件を満たすために、このプロパティを 5000 ミリ秒に設定することをお勧めします。
asyncallMethods
List
いいえ
なし
非同期で呼び出されるメソッドのリストを指定します。リスト内の各文字列は次の形式です。
name: メソッドの名前。
type: 非同期呼び出しのタイプ。
listener: リスナー。
このリストでは、listener フィールドはコールバックタイプの非同期呼び出しに対してのみ有効です。type フィールドの有効な値:
future: Future メソッドを使用してリクエスト実行結果を取得します。
callback: リモートサービス呼び出しが完了した後、HSF は応答を使用して構成されたリスナーをコールバックします。このリスナーは HSFResponseCallback を実装する必要があります。
proxyStyle
String
いいえ
jdk
サービスのエージェントモードを指定します。一般に、このプロパティを構成する必要はありません。コンシューマー Bean をブロックするには、このプロパティを javassist に設定します。
Spring 構成方式 - HSFSpringConsumerBean
サービスをサブスクライブするには、Spring プロファイルで com.taobao.hsf.app.api.util.HSFSpringConsumerBean クラスの Bean を構成します。
サンプルコード
<bean id="helloWorldService" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean"> <! -- [必須] サービス サブスクリプションの操作名を指定します。 --> <property name="interfaceName" value="com.taobao.hsf.test.HelloWorldService" /> <! -- [必須] サブスクライブされたサービスのバージョン番号を指定します。 --> <property name="version" value="1.0.0" /> <! -- [必須] サブスクライブされたサービスのグループを指定します。 --> <property name="group" value="HSF" /> <! -- [オプション] リクエストタイムアウト期間をミリ秒単位で指定します。コンシューマーがプロバイダーから応答を受信しない場合、HSFTimeOutException がスローされます。 --> <! -- コンシューマーに指定された clientTimeout は、プロバイダーに指定された clientTimeout よりも優先されます。コンシューマーに clientTimeout が指定されていない場合、リモートサービス呼び出し中にプロバイダーに指定された clientTimeout が使用されます。--> <property name="clientTimeout" value="3000" /> <! -- [オプション] サービス内の一部のメソッドのリクエストタイムアウト期間を指定します。このプロパティは、コンシューマーの clientTimeout よりも優先されます。 --> <! -- MethodSpecial.methodName パラメーターをメソッド名として指定し、MethodSpecial.clientTimout パラメーターを現在のメソッドのタイムアウト期間として指定します。 --> <property name="methodSpecials"> <list> <bean class="com.taobao.hsf.model.metadata.MethodSpecial"> <property name="methodName" value="sum" /> <property name="clientTimeout" value="2000" /> </bean> </list> </property> <! -- [オプション] Config Server がアドレスをプッシュするのを同期的に待機する時間(単位:ミリ秒)を指定します。 --> <! -- これにより、アドレスがプッシュされる前にサービスが呼び出されたときに HSFAddressNotFoundException が発生するのを防ぎます。 --> <! -- 待機時間の要件を満たすために、このプロパティを 5000 ミリ秒に設定することをお勧めします。 --> <property name="maxWaitTimeForCsAddress" value="5000"/> <! -- [オプション] 非同期で呼び出されるメソッドのリストを指定します。リスト内の各文字列は次の形式です。 --> <! -- name: メソッドの名前。 --> <! -- type: 非同期呼び出しのタイプ。 --> <! -- listener: リスナー。 --> <! -- listener フィールドは、コールバックタイプの非同期呼び出しに対してのみ有効です。--> <! -- type フィールドの有効な値: --> <! -- future: Future メソッドを使用してリクエスト実行結果を取得します。 --> <! -- callback: HSF は応答を使用して構成されたリスナーをコールバックします。リスナーは HSFResponseCallback を実装する必要があります。 --> <property name="asyncallMethods"> <list> <value>name:sayHello;type:callback;listener:com.taobao.hsf.test.service.HelloWorldServiceCallbackHandler</value> </list> </property> <! -- [オプション] サービスのプロキシモードを指定します。一般に、このプロパティを構成する必要はありません。コンシューマー Bean をブロックするには、このプロパティを javassist に設定します。 --> <property name="proxyStyle" value="jdk" /> </bean>