すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:Java SDK

最終更新日:May 31, 2026

このガイドでは、Java SDK を使用して Elastic Algorithm Service (EAS) モデルサービスを呼び出す方法を説明するとともに、入出力の例とサンプルプログラムも提供します。

説明

SDK のユースケースと原則については、「サービス呼び出し SDK」をご参照ください。

前提条件

Maven プロジェクトで EAS Java SDK を使用するには、pom.xml ファイルの <dependencies> セクションに eas-sdk 依存関係を追加します。最新バージョンについては、Maven リポジトリを確認してください。

<dependency>
  <groupId>com.aliyun.openservices.eas</groupId>
  <artifactId>eas-sdk</artifactId>
  <version>2.0.20</version>
</dependency>

EAS SDK 2.0.5 以降には、マルチプライオリティ非同期キューサービス用の QueueService クライアント機能が含まれています。この機能を使用し、依存関係の競合を回避するには、次の 2 つの依存関係を追加し、必要に応じてバージョンを調整してください。

<dependency>
    <groupId>org.java-websocket</groupId>
    <artifactId>Java-WebSocket</artifactId>
    <version>1.5.1</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.1</version>
</dependency>

クイックスタート

Java SDK でサービスを呼び出すには、次の 3 つのステップに従います。

  1. 呼び出し情報の取得:EAS コンソールのサービス詳細ページで、[呼び出し情報] タブに移動して、エンドポイント、サービス名、トークンを取得します。

  2. リクエストタイプの選択とコードの記述:モデルの入力データ形式に基づいて適切な Request/Response クラスを選択し、以下の最小限の例を使用してコードを記述します。

    説明

    組み込みプロセッサ を使用してサービスをデプロイした場合、SDK は対応する入出力クラスを提供します。 たとえば、組み込みの TensorFlow プロセッサTFRequest に対応します。 詳細については、組み込みプロセッサの各プロセッサのドキュメントをご参照ください。

  3. 実行と検証:クライアントプログラムを実行し、レスポンスを検証します。 エラーが発生した場合は、トラブルシューティングガイドをご参照ください。

次のコードは、文字列リクエストのエンドツーエンドにおける最小限の例です。 その他の例については、プログラム例をご参照ください。

import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;

public class TestString {
    public static void main(String[] args) throws Exception {
        PredictClient client = new PredictClient(new HttpConfig());
        
        // VPC 専用接続を使用するには、setDirectEndpoint メソッドを呼び出します。形式は通常 {uid}.vpc.{region-id}.pai-eas.aliyuncs.com です。
        client.setDirectEndpoint("182848887922****.vpc.cn-shanghai.aliyuncs.com");
        // EAS サービスのパブリックエンドポイント。形式は通常 {uid}.{region-id}.pai-eas.aliyuncs.com です。
        // client.setEndpoint("182848887922****.cn-shanghai.pai-eas.aliyuncs.com");
        
        // EAS サービスの名前。
        client.setModelName("your_service_name");
        client.setToken("YOUR_SERVICE_TOKEN");
        // リクエストパス。完全なリクエスト URL は http://<endpoint>/api/direct/<modelName>/<requestPath> です。
        client.setRequestPath("your_custom_path");
        // リクエストボディを作成します。サポートされている入力クラスは SDK によって異なります。この例では String を使用します。
        String request = "[{}]";
        String response = client.predict(request);
        System.out.println(response);

        client.shutdown();
    }
}

API リファレンス

Java SDK には、次のクラスが用意されています:

グループ

クラスの説明

メインクライアントクラス

PredictClient :エンドポイントやトークンなどのサービス詳細の設定、リクエストの送信、レスポンスの受信を行うためのメインクラスです。

接続設定

HttpConfig :タイムアウトや最大接続数など、HTTP 接続パラメータを設定します。

入出力

  • TFRequest :TensorFlow モデル向けのリクエストをカプセル化します。

  • TFResponse :TensorFlow モデルからのレスポンスを解析します。

  • 文字列ベースのシナリオ では、専用のリクエストクラスまたはレスポンスクラスは不要です。String オブジェクトとしてデータを直接送受信できます。

  • サポートされているその他のタイプの詳細については、SDK をご参照ください。

キューサービス

  • QueueClient :データの送信およびサブスクライブに使用する非同期キュークライアントです。このクラスには、前提条件 に記載されている追加の依存関係が必要です。

  • DataFrame :キューサービスからのデータ項目をカプセル化するオブジェクトです。

PredictClient クラス

メインのクライアントクラスです。サービス情報を設定し、リクエストを送信して予測結果を取得します。

API

説明

PredictClient(HttpConfig httpConfig)

  • PredictClient インスタンスを作成します。

  • パラメーターhttpConfigHttpConfig クラスのインスタンスです。

void setToken(String token)

  • HTTP リクエストの認証トークンを設定します。

  • パラメーターtoken はサービスアクセス用の認証トークンです。

void setModelName(String modelName)

  • オンライン予測サービスのモデル名を設定します。

  • パラメーターmodelName は使用するモデルの名前です。

void setEndpoint(String endpoint)

  • リクエスト先サービスのホストとポートを "host:port" 形式で設定します。

  • パラメーターendpoint"host:port" 形式のサービスエンドポイントのアドレスです。

void setDirectEndpoint(String endpoint)

  • VPC 専用接続でサービスにアクセスするためのエンドポイントを設定します。

  • パラメーターendpoint はサービスエンドポイントのアドレスです。

void setRequestPath(String requestPath)

  • サーバーサイドのコードで定義されているリクエストパスを設定します。

  • パラメーターrequestPath はサーバーサイドのリクエストパスです。例: client.setRequestPath("/custom_path")

void setRetryCount(int retryCount)

  • リクエスト失敗時のリトライ回数を設定します。

  • パラメーターretryCount はリトライ回数です。

void setRetryConditions(EnumSet retryConditions)

  • リクエストのリトライ条件を設定します。このメソッドは setRetryCount メソッドと併用できます。デフォルトでは、すべてのリクエストエラーがリトライされます。このメソッドを使用すると、特定のエラー発生時のみリトライするように指定できます。

  • パラメーターretryConditions は、1 つ以上のリトライ条件を含む EnumSet です。サポートされる条件は次のとおりです:

    • RetryCondition.CONNECTION_FAILED : 接続の失敗

    • RetryCondition.CONNECTION_TIMEOUT : 接続のタイムアウト

    • RetryCondition.READ_TIMEOUT : レスポンス読み取りのタイムアウト

    • RetryCondition.RESPONSE_5XX : サーバーからの 5xx ステータスコード

    • RetryCondition.RESPONSE_4XX : サーバーからの 4xx ステータスコード

  • client.setRetryConditions(
        EnumSet.of(
            RetryCondition.READ_TIMEOUT,    // 読み取りタイムアウト時にリトライ
            RetryCondition.RESPONSE_5XX     // 5xx エラーコード時にリトライ
        )
    );

    この例では、タイムアウトが発生した場合、またはサーバーが 5xx のステータスコードを返した場合にのみ、リクエストをリトライするよう指定しています。

void setContentType(String contentType)

  • HTTP リクエストの Content-Type を設定します。デフォルト値は "application/octet-stream" です。

  • パラメーターcontentType は送信するデータストリームのコンテンツタイプです。

void setUrl(String url)

カスタムのリクエスト URL を設定します。

void setCompressor(Compressor compressor)

  • リクエストデータの圧縮方法を設定します。

  • パラメーターcompressor は圧縮方法です。サポートされる値は、Compressor.Gzip および Compressor.Zlib です。

  • 詳細については、「Request Data Compression Example」をご参照ください。

void addExtraHeaders(Map<String, String> extraHeaders)

  • リクエストにカスタムの HTTP ヘッダーを追加します。

  • パラメーターextraHeaders は追加する HTTP ヘッダーの Map<String, String> です。

PredictClient createChildClient(String token, String endpoint, String modelName)

  • 親クライアントのスレッドプールを共有する子クライアントを作成して返します。これは、マルチスレッド予測に役立ちます。

  • パラメーター

    • token : サービスの認証トークン。

    • endpoint : サービスのエンドポイント。

    • modelName : モデルの名前。

TFResponse predict(TFRequest runRequest)

  • オンライン予測サービスに TensorFlow リクエストを送信し、結果を TFResponse オブジェクトとして返します。

  • パラメーターrunRequestTFRequest のインスタンスです。

String predict(String requestContent)

  • オンライン予測サービスに文字列ベースのリクエストを送信し、結果を文字列として返します。

  • パラメーターrequestContent は文字列形式のリクエスト内容です。

byte[] predict(byte[] requestContent)

  • オンライン予測サービスにバイト配列のリクエストを送信し、結果をバイト配列として返します。

  • パラメーターrequestContent はバイト配列形式のリクエスト内容です。

HttpConfig クラス

タイムアウト、スレッド数、コネクションプールなど、基盤となる HTTP 接続パラメーターを設定します。

API

説明

void setIoThreadNum(int ioThreadNum)

  • HTTP リクエストの I/O スレッド数を設定します。デフォルトは 2 です。

  • パラメーターioThreadNum は I/O スレッド数です。

void setReadTimeout(int readTimeout)

  • 接続の確立後、サーバーからデータパケットを受信するまで待機する最大時間です。デフォルト値は 5000 (5 秒) です。

  • パラメーターreadTimeout はミリ秒単位の読み取りタイムアウトです。

重要

このタイムアウトは、接続の確立後にのみ適用されます。setRequestTimeout メソッドで設定するリクエストタイムアウトとは異なります。

void setRequestTimeout(int requestTimeout)

  • 送信から完全なレスポンスの受信まで、リクエストに許可される合計時間です。デフォルト値は 5000 (5 秒) です。

  • パラメーターrequestTimeout はミリ秒単位のリクエストタイムアウトです。

重要

このタイムアウトは、接続の確立、データ転送、サーバー処理を含むリクエストライフサイクル全体を対象とします。setReadTimeout メソッドで設定する読み取りタイムアウトとは異なります。

void setConnectTimeout(int connectTimeout)

  • 接続の確立時に待機する最大時間です。デフォルト値は 5000 (5 秒) です。

  • パラメーターconnectTimeout はミリ秒単位の接続タイムアウトです。

void setMaxConnectionCount(int maxConnectionCount)

  • コネクションプール内の最大接続総数を設定します。デフォルトは 1000 です。

  • パラメーターmaxConnectionCount は最大接続数です。

void setMaxConnectionPerRoute(int maxConnectionPerRoute)

  • ルートごとの最大接続数を設定します。デフォルトは 1000 です。

  • パラメーターmaxConnectionPerRoute は各ルートの最大接続数です。

void setKeepAlive(boolean keepAlive)

  • HTTP サービスの keep-alive を設定します。

  • パラメーター: keepAlive は、接続で keep-alive メカニズムを有効にするかどうかを指定します。デフォルト値は true です。

int getErrorCode()

直近の API 呼び出しのステータスコードを返します。

String getErrorMessage()

直近の API 呼び出しのステータスメッセージを返します。

TFRequest クラス

TensorFlow モデルの入力データを構築します。

API

説明

void setSignatureName(String value)

  • モデルが TensorFlow SavedModel フォーマットの場合、リクエスト対象のモデルの SignatureDef の名前を指定します。

  • パラメーター:リクエスト対象のモデルの SignatureDef の名前。

void addFetch(String value)

  • モデルからフェッチする出力テンソルを指定します。

  • パラメーターvalue は、フェッチする出力テンソルのエイリアスです。

void addFeed(String inputName, TFDataType dataType, long[]shape, ?[]content)

  • リクエストに入力テンソルを追加します。

  • パラメーター

    • inputName:入力テンソルのエイリアス。

    • dataType:入力テンソルのデータ型。

    • shape:入力テンソルの形状。

    • content:テンソルの内容。フラット化された 1 次元配列として提供されます。配列内の要素の型は dataType に依存します。

      入力テンソルの DataType が DT_FLOATDT_COMPLEX64DT_BFLOAT16、または DT_HALF の場合、content 内の要素の型は浮動小数点です。DataType が DT_COMPLEX64 の場合、content 内の隣接する 2 つの浮動小数点要素は、それぞれ複素数の実部と虚部を表します。

      入力テンソルの DataType が DT_DOUBLE または DT_COMPLEX128 の場合、content 内の要素は DOUBLE 型です。DataType が DT_COMPLEX128 の場合、content 内の隣接する 2 つの DOUBLE 要素は、それぞれ複素数の実部と虚部を表します。

      入力テンソルの DataType が DT_INT32DT_UINT8DT_INT16DT_INT8DT_QINT8DT_QUINT8DT_QINT32DT_QINT16DT_QUINT16、または DT_UINT16 の場合、content 内の要素の型は INT です。

      入力テンソルの DataType が DT_INT64 の場合、content 内の要素の型は LONG です。

      入力テンソルの DataType が DT_STRING の場合、content 内の要素の型は文字列です。

      入力テンソルの DataType が DT_BOOL の場合、content 内の要素の型はブール値です。

TFResponse クラス

TensorFlow モデルの予測から出力データを解析し、アクセスします。

API

説明

List<Long> getTensorShape(String outputName)

  • 指定された出力テンソルの形状を取得します。

  • パラメーターoutputName は、出力テンソルのエイリアスです。

  • 戻り値: テンソルの形状を表す長整数のリスト。

List<Float> getFloatVals(String outputName)

  • 出力テンソルのデータ型が DT_FLOAT、DT_COMPLEX64、DT_BFLOAT16、または DT_HALF の場合、指定された出力テンソルのデータを取得します。

  • パラメーターoutputName は、出力テンソルのエイリアスです。

  • 戻り値: モデルの TensorData 出力をフラット化したリスト。

List<Double> getDoubleVals(String outputName)

  • 出力テンソルのデータ型が DT_DOUBLE または DT_COMPLEX128 の場合、指定された出力テンソルのデータを取得します。

  • パラメーターoutputName は、出力テンソルのエイリアスです。

  • 戻り値: モデルの TensorData 出力をフラット化したリスト。

List<Integer> getIntVals(String outputName)

  • 出力テンソルのデータ型が DT_INT32、DT_UINT8、DT_INT16、DT_INT8、DT_QINT8、DT_QUINT8、DT_QINT32、DT_QINT16、DT_QUINT16、または DT_UINT16 の場合、指定された出力テンソルのデータを取得します。

  • パラメーターoutputName は、出力テンソルのエイリアスです。

  • 戻り値: モデルの TensorData 出力をフラット化したリスト。

List<String> getStringVals(String outputName)

  • 出力テンソルのデータ型が DT_STRING の場合、そのテンソルのデータを取得します。

  • パラメーターoutputName は、出力テンソルのエイリアスです。

  • 戻り値: モデルの TensorData 出力をフラット化したリスト。

List<Long> getInt64Vals(String outputName)

  • 出力テンソルのデータ型が DT_INT64 の場合、指定された出力テンソルのデータを取得します。

  • パラメーターoutputName は、出力テンソルのエイリアスです。

  • 戻り値: モデルの TensorData 出力をフラット化したリスト。

List<Boolean> getBoolVals(String outputName)

  • 出力テンソルのデータ型が DT_BOOL の場合、指定された出力テンソルのデータを取得します。

  • パラメーターoutputName は、出力テンソルのエイリアスです。

  • 戻り値: モデルの TensorData 出力をフラット化したリスト。

QueueClient クラス

EAS キューサービスと連携して、データの生成、消費、管理を行います。

API

説明

QueueClient(String endpoint, String queueName, String token, HttpConfig httpConfig, QueueUser user)

  • QueueClient インスタンスを構築します。

  • パラメーター

    • endpoint:キューサービスのエンドポイントアドレス。

    • queueName:キューの名前。

    • token:サービスアクセス用のトークン。

    • httpConfig:HTTP リクエスト設定。

    • user:ユーザー設定。UserId (デフォルトはランダムな UUID) と GroupName (デフォルトは eas) を指定します。

JSONObject attributes()

  • キューサービスの詳細な属性を取得します。

  • 戻り値:キュー情報を含む JSONObject。次のフィールドが含まれます。

    • meta.maxPayloadBytes:単一のデータ項目に許可される最大サイズ (バイト単位)。

    • meta.name:キュー名。

    • stream.approxMaxLength:キューが格納できる項目の概算最大数。

    • stream.firstEntry:キュー内の最初の項目のインデックス。

    • stream.lastEntry:キュー内の最後の項目のインデックス。

    • stream.length:キュー内の現在の項目数。

Pair<Long, String> put(byte[] data, long priority, Map<String, String> tags)

  • データ項目をキューに書き込みます。

  • パラメーター

    • data:書き込むデータ。バイト配列として指定します。

    • priority:データの優先度。高優先度の場合は 1、通常の優先度の場合は 0 (デフォルト)。

    • tags:カスタムのキーと値のタグのマップ。

  • 戻り値:新しいデータ項目の indexrequest ID を含む Pair<Long, String>

DataFrame[] get(long index, long length, long timeout, boolean autoDelete, Map<String, String> tags)

  • キューからデータ項目を取得します。

  • パラメーター

    • index:データを取得する開始インデックス。最新のデータを読み取るには -1 を使用します。

    • length:取得するデータ項目の数。

    • timeout:タイムアウト期間 (秒単位)。

    • autoDeletetrue の場合、取得後にデータがキューから自動的に削除されます。

    • tagsRequestID などのカスタムのキーと値のタグのマップ。

  • 戻り値DataFrame オブジェクトの配列。

void truncate(Long index)

  • 指定された index より小さいインデックスを持つキュー内のすべてのデータ項目を削除します。

String delete(Long index)

  • キューから特定のデータ項目を削除します。

  • パラメーターindex は、削除するデータ項目のインデックスです。

  • 戻り値:削除が成功した場合は "OK"。

JSONObject search(long index)

  • キュー内の特定のデータ項目のステータスを照会します。

  • パラメーターindex は、照会するデータ項目のインデックスです。

  • 戻り値:次の情報を含むキューイング情報の JSONObject

    • ConsumerId:項目を処理しているインスタンスの ID。

    • IsPending:項目が処理中の場合は true、キューで待機中の場合は false

      • True は、項目が処理中であることを意味します。

      • False は、項目がキューで待機中であることを意味します。

    • WaitCount:キュー内で先行する項目の数。これは IsPendingfalse の場合にのみ有効です。IsPendingtrue の場合、この値は 0 です。

    レスポンスの例

    • サービスが {'ConsumerId': 'eas.****', 'IsPending': False, 'WaitCount':2} を返す場合、リクエストがキューイングされていることを示します。

    • ログに no data in stream と表示され、{} が返される場合、データがキューに見つからなかったことを示します。これは、データがサーバー側で正常に処理され、結果が返されたか、index パラメーターが正しく設定されていない可能性があります。ご確認ください。

重要

search を呼び出す場合、QueueUser オブジェクトのグループ ID をサービス名に設定する必要があります。そうしないと、検索結果の IsPending は常に false になります。

  • グループ ID をサービス名に設定します。

    QueueUser u = new QueueUser(UUID.randomUUID().toString(), "<service_name>");
    QueueClient input_queue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), u);
  • 指定されたインデックスのステータスを照会します。

    System.out.println(input_queue.search(index));

WebSocketWatcher watch(long index, long window, boolean indexOnly, boolean autoCommit, Map<String, String> tags)

  • キューサービスをサブスクライブして、利用可能になったデータ項目を受信します。

  • パラメーター

    • index:開始インデックス。保留中のすべてのデータを無視して最新の項目から開始するには -1 を使用します。

    • window:送信ウィンドウのサイズ (未コミットの項目の最大数)。未コミットの項目数がこのウィンドウサイズに達すると、サービスは送信を一時停止します。

    • indexOnlytrue の場合、返される DataFrame オブジェクトにはインデックスとタグのみが含まれ、データペイロードは含まれません。これにより帯域幅を節約できます。

    • autoCommittrue の場合、項目は受信時に自動的にコミットされ、commit() 呼び出しは不要です。autoCommittrue に設定されている場合、window パラメーターは無視されます。

    • tags:サブスクリプションリクエスト用のカスタムパラメーターのマップ。

  • 戻り値:サブスクライブしたデータを受信するための WebSocketWatcher オブジェクト。使用方法の詳細については、「キューサービスの例」をご参照ください。

String commit(Long index) またはString commit(Long[] index)

  • 1 つ以上のデータ項目が消費済みであることを通知し、それらをキューから削除します。

  • 戻り値:コミットが成功した場合は "OK"。

void end(boolean force)

キューサービスへの接続を閉じます。

DataFrame クラス

キューサービスからのデータ項目のラッパーです。

API

説明

byte[] getData()

  • データペイロードを取得します。

  • 戻り値: バイト配列形式のデータ。

long getIndex()

  • データ項目のインデックスを取得します。

  • 戻り値long 型のデータインデックス。

Map<String, String> getTags()

  • データ項目に関連付けられたタグを取得します。

  • 戻り値: タグを表す Map<String, String> オブジェクト。このマップから、キー "requestId" を使用してリクエスト ID を取得できます。例: df.getTags().get("requestId")

コード例

同期推論の例

サービスの入出力形式に一致する例を選択してください。

文字列

カスタムプロセッサでサービスをデプロイした場合、通常は文字列を使用してサービスを呼び出します。 次の例に示すように、この方法は PMML モデルサービスで一般的です。

import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;

public class TestString {
    public static void main(String[] args) throws Exception {
        // クライアントを初期化します。 クライアントオブジェクトは共有してください。 リクエストごとに新しいクライアントオブジェクトを作成しないでください。
        PredictClient client = new PredictClient(new HttpConfig());
        client.setToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****");
        // 直接ネットワーク接続を使用するには、setDirectEndpoint メソッドを呼び出します。
        // 例:client.setDirectEndpoint("182848887922****.vpc.cn-shanghai.aliyuncs.com");
        // 直接ネットワーク接続を有効にするには、EAS コンソールでこの機能を有効にし、EAS サービスへのアクセスに使用するソース vSwitch を指定する必要があります。 これにより、ゲートウェイがバイパスされ、ソフトウェアロードバランシングを介してサービスインスタンスに直接アクセスできるため、安定性とパフォーマンスが向上します。
        // 注:標準のゲートウェイアクセスでは、ユーザー ID から始まるエンドポイントを使用します。 このエンドポイントは、EAS コンソールのサービスの [Call Information] で確認できます。 直接ネットワーク接続の場合は、182848887922****.vpc.{region_id}.aliyuncs.com という形式のドメイン名を使用します。
        client.setEndpoint("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com");
        client.setModelName("scorecard_pmml_example");

        // 入力文字列を定義します。
        String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
        System.out.println(request);

        // EAS からレスポンス文字列を取得します。
        try {
            String response = client.predict(request);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // クライアントをシャットダウンします。
        client.shutdown();
        return;
    }
}

TensorFlow

TensorFlow モデルを使用する場合は、次の例に示すように、入力と出力にTFRequest クラスとTFResponse クラスを使用します。

import java.util.List;

import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
import com.aliyun.openservices.eas.predict.request.TFDataType;
import com.aliyun.openservices.eas.predict.request.TFRequest;
import com.aliyun.openservices.eas.predict.response.TFResponse;

public class TestTF {
    public static TFRequest buildPredictRequest() {
        TFRequest request = new TFRequest();
        request.setSignatureName("predict_images");
        float[] content = new float[784];
        for (int i = 0; i < content.length; i++) {
            content[i] = (float) 0.0;
        }
        request.addFeed("images", TFDataType.DT_FLOAT, new long[]{1, 784}, content);
        request.addFetch("scores");
        return request;
    }

    public static void main(String[] args) throws Exception {
        PredictClient client = new PredictClient(new HttpConfig());

        // 直接ネットワーク接続を使用するには、setDirectEndpoint メソッドを呼び出します。 エンドポイントの形式は {uid}.vpc.{region_id}.aliyuncs.com です。
        // client.setDirectEndpoint("182848887922****.vpc.cn-shanghai.aliyuncs.com");
        // 標準のゲートウェイアクセスでは、ユーザー ID から始まるエンドポイントを使用します。 このエンドポイントは、EAS コンソールのサービスにある [Call Information] で確認できます。
        client.setEndpoint("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com");
        client.setModelName("mnist_saved_model_example");
        client.setToken("YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****");
        long startTime = System.currentTimeMillis();
        int count = 1000;
        for (int i = 0; i < count; i++) {
            try {
                TFResponse response = client.predict(buildPredictRequest());
                List<Float> result = response.getFloatVals("scores");
                System.out.print("Predict Result: [");
                for (int j = 0; j < result.size(); j++) {
                    System.out.print(result.get(j).floatValue());
                    if (j != result.size() - 1) {
                        System.out.print(", ");
                    }
                }
                System.out.print("]\n");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Spend Time: " + (endTime - startTime) + "ms");
        client.shutdown();
    }
}

キューサービスの例

キューサービスにアクセスするには、QueueClient インターフェイスを使用します。 次の例にその方法を示します。

import com.alibaba.fastjson.JSONObject;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
import com.aliyun.openservices.eas.predict.http.QueueClient;
import com.aliyun.openservices.eas.predict.queue_client.QueueUser;
import com.aliyun.openservices.eas.predict.queue_client.WebSocketWatcher;

public class DemoWatch {
    public static void main(String[] args) throws Exception {
        /** キューサービス クライアントを作成します。 */
        String queueEndpoint = "18*******.cn-hangzhou.pai-eas.aliyuncs.com";
        String inputQueueName = "test_queue_service";
        String sinkQueueName = "test_queue_service/sink";
        String queueToken = "test-token";

        /** 入力キュー。 推論サービスは、このキューからリクエストデータを自動的に読み取ります。 */
        QueueClient inputQueue =
            new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser());
        /** 出力キュー。 推論サービスが入力データを処理した後、結果をこのキューに書き込みます。 */
        QueueClient sinkQueue =
            new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser());
        /** キューデータをクリアします。 慎重に使用してください。 */
        inputQueue.clear();
        sinkQueue.clear();

        /** 入力キューにデータを追加します。 */
        int count = 10;
        for (int i = 0; i < count; ++i) {
            String data = Integer.toString(i);
            inputQueue.put(data.getBytes(), null);
            /** キューサービスは複数の優先度をサポートしています。 put メソッドを使用して、データの優先度を設定できます。 デフォルトの優先度は 0 です。 */
            //  inputQueue.put(data.getBytes(), 0L, null);
        }

        /** watch メソッドを使用して、出力キューからデータをサブスクライブします。 ウィンドウサイズは 5 です。 */
        WebSocketWatcher watcher = sinkQueue.watch(0L, 5L, false, true, null);
        /** WatchConfig パラメーターを使用して、リトライ回数、リトライ間隔 (秒単位)、および無期限にリトライするかどうかをカスタマイズします。 WatchConfig を構成しない場合、システムはデフォルトで 5 秒間隔で 3 回リトライします。 */
        //  WebSocketWatcher watcher = sinkQueue.watch(0L, 5L, false, true, null, new WatchConfig(3, 1));
        //  WebSocketWatcher watcher = sinkQueue.watch(0L, 5L, false, true, null, new WatchConfig(true, 10));

        /** 出力データを取得します。 */
        for (int i = 0; i < count; ++i) {
            try {
                /** getDataFrame() メソッドで DataFrame データを取得します。 この呼び出しは、データが利用可能になるまでブロックされます。 */
                byte[] data = watcher.getDataFrame().getData();
                System.out.println("[watch] data = " + new String(data));
            } catch (RuntimeException ex) {
                System.out.println("[watch] error = " + ex.getMessage());
                break;
            }
        }
        /** watcher オブジェクトを閉じます。 各クライアントインスタンスは 1 つの watcher オブジェクトのみをサポートします。 watcher を閉じないと、次回の実行時にエラーが発生します。 */
        watcher.close();

        Thread.sleep(2000);
        JSONObject attrs = sinkQueue.attributes();
        System.out.println(attrs.toString());

        /** クライアントをシャットダウンします。 */
        inputQueue.shutdown();
        sinkQueue.shutdown();
    }
}

Java SDK を使用したサービスの呼び出しには、次の手順が含まれます:

  1. QueueClient インターフェイスを使用してキューサービス クライアント オブジェクトを作成します。 推論サービスを作成する場合は、入力キュー オブジェクトと出力キュー オブジェクトも作成する必要があります。

  2. put() 関数を使用して入力キューにデータを送信し、watch() 関数を使用して出力キューからデータをサブスクライブします。

    説明

    本番環境では、データの送信とサブスクリプションに、それぞれ別のスレッドを使用する必要があります。 この例では、デモンストレーションのために、これらの操作を同じスレッドで実行します。

リクエストデータの圧縮

大量のデータを含むリクエストの場合、EAS は、サーバーサイドに送信する前に Zlib または Gzip 形式を使用してデータを圧縮することに対応しています。 この機能を有効にするには、サービス構成で rpc.decompressor を指定する必要があります。

サービス構成は次のとおりです:

"metadata": {
  "rpc": {
    "decompressor": "zlib"
  }
}

以下にコード例を示します:

package com.aliyun.openservices.eas.predict;
import com.aliyun.openservices.eas.predict.http.Compressor;
import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
public class TestString {
    public static void main(String[] args) throws Exception{
    	  // クライアントを初期化します。
        PredictClient client = new PredictClient(new HttpConfig());
        client.setEndpoint("18*******.cn-hangzhou.pai-eas.aliyuncs.com");
        client.setModelName("echo_compress");
        client.setToken("YzZjZjQwN2E4NGRkMDMxNDk5NzhhZDcwZDBjOTZjOGYwZDYxZGM2****");
        // Compressor.Gzip を使用することもできます。
        client.setCompressor(Compressor.Zlib);
        // 入力文字列を定義します。
        String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
        System.out.println(request);
        // EAS からレスポンス文字列を取得します。
        String response = client.predict(request);
        System.out.println(response);
        // クライアントをシャットダウンします。
        client.shutdown();
        return;
    }
}

トラブルシューティング

Java SDK呼び出し例外のトラブルシューティングについては、認証ルーティング接続、およびサーバー側のエラーに関する一般的な問題を含め、「サービス呼び出し SDK」の「呼び出し例外のトラブルシューティング」セクションをご参照ください。

サービスステータスコードエラーメッセージの意味、および推奨されるアクションの完全なリストについては、「付録:サービスステータスコードと一般的なエラー」をご参照ください。