タスク結果をポーリングする代わりに、HTTP コールバック URL または RocketMQ を設定して、EventBridge からタスク完了通知を受信できます。通知を受け取った後、結果クエリ API を一度呼び出して出力を取得します。
背景情報
Alibaba Cloud Model Studio は EventBridge と統合されており、設定されたイベントターゲットにタスク完了イベントを配信します。
非同期タスクが完了 (成功または失敗) すると、タスクのステータスと ID を含むタスク完了イベントが EventBridge にレポートされ、EventBridge はそれをターゲットに転送します。その他のイベントターゲットについては、「イベントターゲット」および「ターゲットサービスタイプ」をご参照ください。
ポーリングとイベント駆動型通知の比較
比較ディメンション | ポーリング | イベント駆動 |
|---|
レート制限 | 結果クエリ API にはレート制限 (20 QPS) があります | レート制限なし |
統合の複雑さ | シンプル—結果クエリ API をポーリングします。Text-to-Image や Text-to-Video などの一部のタスクでは、組み込みのポーリング機能を備えた SDK が提供されます。 | EventBridge で HTTP コールバックまたは RocketMQ を設定し、通知を解析します。 |
サーバーリソースの消費 | 頻繁なクエリによりサーバーリソースを消費します。 | リソース消費なし—EventBridge がプッシュします。 |
遅延 | ポーリング間隔に依存します。 | ほぼリアルタイム—完了後すぐにプッシュされます。 |
推奨事項 | 低同時実行数または遅延が許容されるシナリオ。 | 高同時実行数または遅延の影響を受けやすいシナリオ。 |
EventBridge で、以下のいずれかのイベントターゲットを設定します:
選択肢 1:HTTP コールバック URL の設定
概要
Alibaba Cloud Model Studio がタスクを完了すると、タスク完了イベントが EventBridge にレポートされます。その後、EventBridge はこのイベントをコールバックエンドポイントにプッシュします。コールバックエンドポイントはイベントを解析して正常に処理されたタスク ID を抽出し、結果クエリ API を一度呼び出してタスクの出力を取得します。
メリット:直接ポーリングと比較して、このアプローチは不要なポーリングリクエストを回避し、リソース消費を削減し、結果クエリ API のレート制限への負荷を軽減します。
課金:EventBridge の課金。
たとえば、Text-to-Image で HTTP コールバック URL を使用した非同期呼び出しのフローは次のとおりです: Text-to-Image タスクを作成し、`task_id` を受信します。この時点ではタスクはまだ完了していません。 Alibaba Cloud Model Studio が処理を完了すると、タスク完了イベントが EventBridge にレポートされます。 EventBridge はイベントを HTTP コールバックエンドポイントに積極的にプッシュします。 コールバックエンドポイントはイベントを解析して、完了した task_id を取得します。 最後に、結果クエリ API を呼び出して、生成されたイメージ URL を取得します。
| 
|
操作手順
ステップ 1:HTTP コールバックエンドポイントの準備
通常、非同期イベント通知を受信するために、業務システムに HTTP コールバックエンドポイントをデプロイします。以下の要件を満たす必要があります:
- リクエスト URL:パブリックネットワークまたは Alibaba Cloud VPC 経由でアクセス可能な HTTP URL。
- リクエストメソッド:
POST。
- リクエストボディ:非同期タスク完了イベントデータを含む
JSON フォーマット。正確なイベント構造は EventBridge コンソールで確認できます。例:
非同期タスク完了イベントのデータ構造を表示するにはクリックしてください
{
"datacontenttype": "application/json;charset=utf-8",
"aliyunaccountid": "xxxxx",
"aliyunpublishtime": "2023-10-25T01:45:16.993Z",
"data": {
"start_time": "2023-10-25 09:45:09",
"user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v1",
"task_status": "SUCCEEDED",
"contain_result": false,
"end_time": "2023-10-25 09:45:16",
"task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35",
"region": "ap-southeast-1",
"request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3",
"api_key_id": "1250"
},
"aliyunoriginalaccountid": "xxxxxxxx",
"specversion": "1.0",
"aliyuneventbusname": "default",
"id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9",
"source": "acs.dashscope",
"time": "2023-1-25T01:45:16.969Z",
"aliyunregionid": "ap-southeast-1",
"type": "dashscope:System:AsyncTaskFinish"
}
ステップ 2:EventBridge コンソールでのイベントのクエリ
EventBridge コンソールでは、Alibaba Cloud Model Studio によって配信されたイベントをクエリできます。
-
Alibaba Cloud アカウントにログインし、EventBridge コンソールに移動します。 [シンガポールリージョン]に切り替えます。 左側のナビゲーションウィンドウで、[イベントバス]を選択し、[デフォルト]をクリックしてクラウドサービスのデフォルトイベントバスに入ります。
Alibaba Cloud Model Studio は、デフォルトでデフォルトイベントバスを使用します。
-
[イベント追跡] をクリックし、クエリ条件を入力して、Alibaba Cloud Model Studio からの非同期タスク完了イベントを検索します。
- イベントソース:
acs.dashscope を検索して選択します。これは、イベントが DashScope (Alibaba Cloud Model Studio の基盤となるモデルサービス) から発信されたことを示します。
- イベントタイプ:
dashscope:System:AsyncTaskFinish を検索して選択します。これは、非同期タスク完了イベントを示します。
-
[詳細] をクリックすると、報告されたイベントの詳細が表示されます。
{
"datacontenttype": "application/json;charset=utf-8",
"aliyunaccountid": "xxxxx",
"aliyunpublishtime": "2023-10-25T01:45:16.993Z",
"data": {
"start_time": "2023-10-25 09:45:09",
"user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v1",
"task_status": "SUCCEEDED",
"contain_result": false,
"end_time": "2023-10-25 09:45:16",
"task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35",
"region": "ap-southeast-1",
"request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3",
"api_key_id": "1250"
},
"aliyunoriginalaccountid": "xxxxxxxx",
"specversion": "1.0",
"aliyuneventbusname": "default",
"id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9",
"source": "acs.dashscope",
"time": "2023-1-25T01:45:16.969Z",
"aliyunregionid": "ap-southeast-1",
"type": "dashscope:System:AsyncTaskFinish"
}
パラメーターの説明を表示するにはクリックしてください
パラメーター | タイプ | 説明 | 値の例 |
|---|
datacontenttype | String | データフィールドのデータフォーマット。application/json のみがサポートされています。 | application/json;charset=utf-8
|
aliyunaccountid | String | Alibaba Cloud アカウント ID。 | 123456789098**** |
aliyunpublishtime | String | イベントが受信された時間。 | 2020-11-19T21:04:42.179PRC |
data | Object | イベントの内容。発信元サービスによって定義された構造を持つ JSON オブジェクト。CloudEvents には、イベント発生時にイベントプロデューサーによって提供されるコンテキスト情報が data 内にカプセル化されて含まれる場合があります。 | |
data[].start_time | String | 非同期タスクの開始時刻。 フォーマット:yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:09 |
data[].end_time | String | 非同期タスクの完了時刻。 フォーマット:yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:16 |
data[].user_api_unique_key | String | 一意の API キー (タスク送信時に使用されたモデル API の 5 つの要素)。フォーマット: apikey:version:group:task:function-call:model version:バージョン group:グループ task:タスク名 function-call:メソッド名 model:モデル名
| apikey:v1:audio:asr:transcription:paraformer-8k-v1
|
data[].task_status | String | タスクのステータス | SUCCEEDED |
data[].task_id | String | タスク ID | a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35 |
data[].region | String | タスクが実行されるリージョン | ap-southeast-1 |
data[].request_id | String | リクエスト ID | 108f38f5-xxxx-xxxx-xxxx-6504db9080b3 |
data[].api_key_id | String | API キー ID | 1234 |
data[].contain_result | Boolean | イベントに結果の詳細が含まれているかどうか。 true:結果の詳細が含まれています。 false:結果の詳細が含まれていません。
| true |
data[].output_result | JSON | 結果の詳細。contain_result が true の場合に返されます。 | {"request_id": "6abe5b9b-f95c-9a23-8bed-0a04c2158b5c", "output": {"task_id": "84d0e919-5eda-40a1-a6e9-a94033840693", "task_status": "SUCCEEDED", "submit_time": "2026-05-20 15:38:19.940", "scheduled_time": "2026-05-20 15:38:19.995", "end_time": "2026-05-20 15:38:25.186", "text": "This is a simulated text generation result."}, "usage": {"output_tokens": 100, "input_tokens": 21}}
|
aliyunoriginalaccountid | String | 元の Alibaba Cloud アカウント ID | 123456789098**** |
specversion | String | CloudEvents プロトコルのバージョン | 1.0 |
aliyuneventbusname | String | イベントを受信するイベントバスの名前 | default |
id | String | イベント ID—イベントを識別する一意の値。 | 45ef4dewdwe1-7c35-447a-bd93-fab**** |
source | String | イベントソース。 イベントを提供するサービスで、何が発生したかを識別します。通常、イベントソースのタイプ、発行メカニズム、または生成プロセスが含まれます。送信者は、各イベントの source+id の組み合わせが一意であることを保証する必要があります。 | acs.dashscope |
time | String | イベントが生成された時間。 正確なイベント時間が不明な場合、CloudEvents プロデューサーは time を別の値 (例:現在時刻) に設定することがありますが、同じソースのすべてのプロデューサーは一貫した値を使用する必要があります。 | 2020-11-19T21:04:41+08:00 |
aliyunregionid | String | イベントを受信するリージョン。 | ap-southeast-1 |
type | String | イベントタイプ。 ソースに関連するイベントのタイプを記述します。ルーティング、イベントクエリ、およびポリシーの適用に使用されます。フォーマットはプロデューサーによって定義され、バージョン情報が含まれます。 | dashscope:System:AsyncTaskFinish |
ステップ 3:イベント転送ルールの設定
-
左側のナビゲーションウィンドウで、[イベントルール] を選択し、[ルールを作成] をクリックします。
-
基本情報の設定: カスタムルール名と説明を入力します。
-
イベントパターン設定:転送するイベントを指定します。
-
イベントソース: acs.dashscope を検索して選択します。これは、イベントが Alibaba Cloud Model Studio から発生したことを示します。
-
イベントタイプ: 非同期タスク完了イベントを示す dashscope:System:AsyncTaskFinish を検索して選択します。
-
パターン内容: 特定のイベントに一致するようにフィルター条件を設定します。 ステップ 2 で照会したイベント詳細のフィールドを使用します。 パターン構文については、「イベントパターン」をご参照ください。 例:
- デフォルト:イベントソースとタイプを選択すると、パターンはデフォルトで以下のように設定され、すべての
dashscope:System:AsyncTaskFinish イベントが転送されます。
{
"source": ["acs.dashscope"],
"type": ["dashscope:System:AsyncTaskFinish"]
}
- フィールドによるフィルタリング:
user_api_unique_key フィールドが :paraformer-8k-v1 で終わるイベントのみを転送します。つまり、paraformer-8k-v1 モデルのイベントのみです。イベントタイプは dashscope:System:AsyncTaskFinish です。
{
"source": ["acs.dashscope"],
"type": ["dashscope:System:AsyncTaskFinish"],
"data": {
"user_api_unique_key": [
{"suffix": ":paraformer-8k-v1"}
]
}
}
- イベントターゲットの設定:HTTP コールバック URL や RocketMQ メッセージキューなど、複数のイベントターゲットタイプをサポートしています。詳細については、ステップ 4 をご参照ください。
ステップ 4:イベントターゲットを HTTP コールバックエンドポイントに設定
-
イベントターゲットの設定: イベントを HTTP コールバック URL に転送します。
-
OK をクリックしてルールを保存します。イベントターゲットが HTTP 形式で表示された場合、構成は正常に完了しました。
ルールの [イベントターゲット] 列に [HTTP (1)] と表示されます。
選択肢 2:RocketMQ の設定
概要
Alibaba Cloud Model Studio がタスクを完了すると、タスク完了イベントが EventBridge にレポートされます。EventBridge はイベントを Message Queue for RocketMQ に転送します。アプリケーションはメッセージキューをリッスンし、メッセージを消費して完了したタスク ID を抽出し、結果クエリ API を一度呼び出してタスクの出力を取得します。
メリット:HTTP コールバックアプローチとは異なり、RocketMQ はメッセージ配信を保証し、失敗時のリトライをサポートしているため、高いメッセージ信頼性が求められるシナリオに最適です。
課金:EventBridge の課金、RocketMQ の課金。
たとえば、Text-to-Image で RocketMQ を使用した非同期呼び出しのフローは次のとおりです: Text-to-Image タスクを作成し、task_id を受信します。この時点ではタスクはまだ完了していません。 Alibaba Cloud Model Studio が処理を完了すると、タスク完了イベントが EventBridge にレポートされます。 EventBridge はイベントを指定された RocketMQ キューに積極的に転送します。 アプリケーションは RocketMQ キューをリッスンし、メッセージを消費して、完了した task_id を抽出します。 最後に、結果クエリ API を呼び出して、生成されたイメージ URL を取得します。
| 
|
操作手順
ステップ 1:RocketMQ インスタンスの準備 (RocketMQ キューが既にある場合はスキップ)
RocketMQ 経由でイベントを受信するには、まず RocketMQ キューを準備します。
-
RocketMQ コンソールに移動します。左側のナビゲーションウィンドウで、[インスタンス] を選択し、[インスタンスの作成] をクリックします。
インスタンス ID の例:rmq-cn-nwy*******。
-
インスタンスの Topic を作成し、カスタムのトピック名を入力します。
-
インスタンスの Group を作成し、カスタムのグループ名を入力します。
ステップ 2:EventBridge コンソールでのイベントのクエリ
EventBridge コンソールでは、Alibaba Cloud Model Studio によって配信されたイベントをクエリできます。
-
Alibaba Cloud アカウントにログインしてEventBridge コンソールに移動し、[シンガポールリージョン]に切り替えます。左側のナビゲーションウィンドウで、[イベントバス] を選択し、[default] をクリックして、クラウドサービスのデフォルトイベントバスに移動します。
Alibaba Cloud Model Studio は、デフォルトでデフォルトイベントバスを使用します。
-
[イベント追跡] をクリックし、クエリ条件を入力して、Alibaba Cloud Model Studio からの非同期タスク完了イベントを検索します。
- イベントソース:
acs.dashscope を検索して選択します。これは、イベントが DashScope (Alibaba Cloud Model Studio の基盤となるモデルサービス) から発信されたことを示します。
- イベントタイプ:
dashscope:System:AsyncTaskFinish を検索して選択します。これは、非同期タスク完了イベントを示します。
-
[詳細] をクリックすると、報告されたイベントの詳細を表示できます。
{
"datacontenttype": "application/json;charset=utf-8",
"aliyunaccountid": "xxxxx",
"aliyunpublishtime": "2023-10-25T01:45:16.993Z",
"data": {
"start_time": "2023-10-25 09:45:09",
"user_api_unique_key": "apikey:v1:audio:asr:transcription:paraformer-8k-v1",
"task_status": "SUCCEEDED",
"contain_result": false,
"end_time": "2023-10-25 09:45:16",
"task_id": "a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35",
"region": "ap-southeast-1",
"request_id": "108f38f5-xxxx-xxxx-xxxx-6504db9080b3",
"api_key_id": "1250"
},
"aliyunoriginalaccountid": "xxxxxxxx",
"specversion": "1.0",
"aliyuneventbusname": "default",
"id": "81765e5b-xxxx-xxxx-xxxx-bbad8dde2bd9",
"source": "acs.dashscope",
"time": "2023-1-25T01:45:16.969Z",
"aliyunregionid": "ap-southeast-1",
"type": "dashscope:System:AsyncTaskFinish"
}
パラメーターの説明を表示するにはクリックしてください
パラメーター | タイプ | 説明 | 値の例 |
|---|
datacontenttype | String | データフィールドのデータフォーマットです。application/json のみがサポートされています。 | application/json;charset=utf-8
|
aliyunaccountid | String | Alibaba Cloud アカウント ID。 | 123456789098**** |
aliyunpublishtime | String | イベントが受信された時間。 | 2020-11-19T21:04:42.179PRC |
data | Object | イベントの内容。発信元サービスによって定義された構造を持つ JSON オブジェクト。CloudEvents には、イベント発生時にイベントプロデューサーによって提供されるコンテキスト情報が data 内にカプセル化されて含まれる場合があります。 | |
data[].start_time | String | 非同期タスクの開始時刻。 フォーマット:yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:09 |
data[].end_time | String | 非同期タスクの完了時刻。 フォーマット:yyyy-MM-dd HH:mm:ss | 2023-10-25 09:45:16 |
data[].user_api_unique_key | String | 一意の API キー (タスク送信時に使用されたモデル API の 5 つの要素)。フォーマット: apikey:version:group:task:function-call:model version:バージョン group:グループ task:タスク名 function-call:メソッド名 model:モデル名
| apikey:v1:audio:asr:transcription:paraformer-8k-v1
|
data[].task_status | String | タスクのステータス | SUCCEEDED |
data[].task_id | String | タスク ID | a154c328-xxxx-xxxx-xxxx-e52a9a7e9a35 |
data[].region | String | タスクが実行されるリージョン | ap-southeast-1 |
data[].request_id | String | リクエスト ID | 108f38f5-xxxx-xxxx-xxxx-6504db9080b3 |
data[].api_key_id | String | API キー ID | 1234 |
data[].contain_result | Boolean | イベントに結果の詳細が含まれているかどうか。 true:結果の詳細が含まれています。 false:結果の詳細が含まれていません。
| true |
data[].output_result | JSON | 結果の詳細。contain_result が true の場合に返されます。 | {"request_id": "6abe5b9b-f95c-9a23-8bed-0a04c2158b5c", "output": {"task_id": "84d0e919-5eda-40a1-a6e9-a94033840693", "task_status": "SUCCEEDED", "submit_time": "2026-05-20 15:38:19.940", "scheduled_time": "2026-05-20 15:38:19.995", "end_time": "2026-05-20 15:38:25.186", "text": "This is a simulated text generation result."}, "usage": {"output_tokens": 100, "input_tokens": 21}}
|
aliyunoriginalaccountid | String | 元の Alibaba Cloud アカウント ID | 123456789098**** |
specversion | String | CloudEvents プロトコルのバージョン | 1.0 |
aliyuneventbusname | String | イベントを受信するイベントバスの名前 | default |
id | String | イベント ID—イベントを識別する一意の値。 | 45ef4dewdwe1-7c35-447a-bd93-fab**** |
source | String | イベントソース。 イベントを提供するサービスで、何が発生したかを識別します。通常、イベントソースのタイプ、発行メカニズム、または生成プロセスが含まれます。送信者は、各イベントの source+id の組み合わせが一意であることを保証する必要があります。 | acs.dashscope |
time | String | イベントが生成された時間。 正確なイベント時間が不明な場合、CloudEvents プロデューサーは time を別の値 (例:現在時刻) に設定することがありますが、同じソースのすべてのプロデューサーは一貫した値を使用する必要があります。 | 2020-11-19T21:04:41+08:00 |
aliyunregionid | String | イベントを受信するリージョン。 | ap-southeast-1 |
type | String | イベントタイプ。 ソースに関連するイベントのタイプを記述します。ルーティング、イベントクエリ、およびポリシーの適用に使用されます。フォーマットはプロデューサーによって定義され、バージョン情報が含まれます。 | dashscope:System:AsyncTaskFinish |
ステップ 3:イベント転送ルールの設定
-
左側のナビゲーションウィンドウで、[イベントルール] を選択し、[ルールを作成] をクリックします。
-
基本情報の設定: カスタムルール名と説明を入力します。
-
イベントパターンの設定:転送するイベントを指定します。
-
イベントソース: イベントが Alibaba Cloud Model Studio から発生したことを示す acs.dashscope を検索して選択します。
-
イベントタイプ: 非同期タスクの完了イベントを示す dashscope:System:AsyncTaskFinish を検索して選択します。
-
パターンの内容:特定のイベントに一致するようにフィルター条件を設定します。ステップ 2 で取得したイベント詳細のフィールドを使用します。パターン構文については、「イベントパターン」をご参照ください。例:
- デフォルト:イベントソースとタイプを選択すると、パターンはデフォルトで以下のように設定され、すべての
dashscope:System:AsyncTaskFinish イベントが転送されます。
{
"source": ["acs.dashscope"],
"type": ["dashscope:System:AsyncTaskFinish"]
}
- フィールドによるフィルタリング:
user_api_unique_key フィールドが :paraformer-8k-v1 で終わるイベントのみを転送します。つまり、paraformer-8k-v1 モデルのイベントのみです。イベントタイプは dashscope:System:AsyncTaskFinish です。
{
"source": ["acs.dashscope"],
"type": ["dashscope:System:AsyncTaskFinish"],
"data": {
"user_api_unique_key": [
{"suffix": ":paraformer-8k-v1"}
]
}
}
- イベントターゲットの設定: HTTP コールバック URL や RocketMQ メッセージキューなど、複数のイベントターゲットタイプをサポートしています。 詳細については、ステップ 4 をご参照ください。
ステップ 4:イベントターゲットを RocketMQ に設定
RocketMQ を作成した後、イベントターゲット設定インターフェイスを開き、RocketMQ インスタンスを選択します。
- サービスタイプ:「Message Queue for RocketMQ」を選択します。
- バージョン:作成した RocketMQ のバージョン (例:RocketMQ 5.x)。
- インスタンス ID:RocketMQ インスタンスのインスタンス ID。詳細はステップ 1をご参照ください。
- トピック:作成したトピック名。詳細はステップ 1をご参照ください。
ステップ 5:RocketMQ コンソールでのメッセージの表示
設定後、非同期タスクを送信します。完了後、設定した RocketMQ トピックでメッセージを表示できます。
[Topics] ページで、対象のトピックを見つけ、[アクション] 列の [詳細] をクリックします。
トピック詳細ページで、[ワンクリック送受信体験] タブに切り替えます。[基本機能] セクションで、[PushConsumer] などの消費方法を選択します。
[トピック名] や [グループ ID] などのパラメーターを設定した後、[実行] をクリックしてメッセージの受信を開始します。[実行結果] タブには、メッセージ ID や受信時刻など、受信したメッセージが表示されます。
ステップ 6:SDK を使用したメッセージの受信と消費
RocketMQ Java SDK を使用して、関連するトピックをサブスクライブし、メッセージリスナーを実装するロジックを実装します。メッセージ受信時にそれを処理します。
以下の例は、RocketMQ 5.0 の Java クライアントコードを示しています。
- Maven プロジェクトに、この依存関係を追加します:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client-java</artifactId>
<version>5.0.4</version>
</dependency>
import com.alibaba.fastjson2.JSON;
import org.apache.rocketmq.client.apis.*;
import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
import org.apache.rocketmq.client.apis.consumer.FilterExpression;
import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
import org.apache.rocketmq.client.apis.consumer.PushConsumer;
import org.apache.rocketmq.shaded.org.slf4j.Logger;
import org.apache.rocketmq.shaded.org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Collections;
public class ConsumerExample {
private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerExample.class);
private ConsumerExample() {
}
public static void main(String[] args) throws ClientException, IOException, InterruptedException {
/*
コンソールのインスタンス詳細ページの [Endpoints] タブから取得したエンドポイント。
Alibaba Cloud ECS インスタンスから内部ネットワーク経由でアクセスする場合は、VPC エンドポイントを使用します。
ローカルのパブリックネットワークまたはオンプレミスの IDC からアクセスする場合は、パブリックエンドポイントを使用します。パブリックエンドポイントアクセスには、インスタンスのパブリックネットワークアクセスを有効にする必要があります。
*/
String endpoints = "xxxx";
// サブスクライブするターゲットトピックを指定します。トピックは事前にコンソールで作成しておく必要があります。そうしないとエラーが発生します。
String topic = "xxxx";
// コンシューマーのコンシューマーグループを指定します。グループは事前にコンソールで作成しておく必要があります。そうしないとエラーが発生します。
String consumerGroup = "xxxx";
final ClientServiceProvider provider = ClientServiceProvider.loadService();
ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(endpoints);
/*
パブリックエンドポイントを使用する場合は、インスタンスのユーザー名とパスワードを設定します。これらはコンソールのインスタンス詳細ページで確認できます。
Alibaba Cloud ECS インスタンスから内部ネットワーク経由でアクセスする場合、この設定はスキップします。サーバーが VPC 情報をインテリジェントに取得します。
*/
builder.setCredentialProvider(new StaticSessionCredentialsProvider("xxxx", "xxxx"));
ClientConfiguration clientConfiguration = builder.build();
// サブスクリプションフィルターのルール—任意のタグを持つメッセージをサブスクライブします。
String tag = "*";
FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
// PushConsumer をコンシューマーグループ、通信パラメーター、およびサブスクリプション関係で初期化します。
PushConsumer pushConsumer = provider.newPushConsumerBuilder()
.setClientConfiguration(clientConfiguration)
// コンシューマーグループを設定します。
.setConsumerGroup(consumerGroup)
// 事前にバインドされたサブスクリプション関係を設定します。
.setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
// メッセージリスナーを設定します。
.setMessageListener(messageView -> {
try {
// メッセージを処理し、消費結果を返します。
ByteBuffer buffer = messageView.getBody();
ByteBuffer newBuffer = ByteBuffer.allocate(buffer.capacity());
for (int i = 0; i < buffer.capacity(); i++) {
newBuffer.put(buffer.get(i));
}
String result = new String(newBuffer.array());
LOGGER.info("Consume message={}", JSON.toJSONString(result));
System.out.println(result);
return ConsumeResult.SUCCESS;
} catch (Exception e) {
LOGGER.error("deal message has error", e);
return ConsumeResult.FAILURE;
}
})
.build();
Thread.sleep(Long.MAX_VALUE);
// PushConsumer が不要になったら閉じます。
pushConsumer.close();
}
}
よくある質問
1 つのイベントルールに複数のイベントターゲットを設定できますか?
はい。1 つのイベントルールに複数のイベントターゲットを設定できます。設定されている場合、同じイベントがすべてのターゲットに配信されます。
イベントルールを設定しましたが、イベントを受信できません。なぜですか?
イベント転送ルールのリージョンがイベントのリージョンと一致していることを確認してください。たとえば、シンガポールリージョンで設定されたルールは、シンガポールリージョンのイベントのみを転送し、他のリージョンのイベントは転送しません。コンソールページ上部のリージョンセレクターで EventBridge のリージョンを確認してください。
HTTP/HTTPS サービスリクエストがタイムアウトするか、エラーを返しますか?
以下の手順に従ってトラブルシューティングを行ってください:
-
HTTP/HTTPS サービスのステータスを確認します。
-
イベントターゲットで設定された URL を確認します。
-
イベントターゲットに設定されたネットワークタイプを確認します:
-
その他のパラメーター設定については、「イベントターゲットのパラメーター」をご参照ください。