ApsaraMQ for RocketMQ がイベントソースとして EventBridge を介して Function Compute (FC) と統合されると、ApsaraMQ for RocketMQ トリガー (以下、RocketMQ トリガー) は関連付けられた関数を呼び出すことができます。この関数を使用すると、ApsaraMQ for RocketMQ に発行されたメッセージをカスタムで処理できます。本トピックでは、FC コンソールでの RocketMQ トリガーの作成、関数のエントリポイントパラメーターの設定、および関数コードの記述とテストの方法について説明します。
仕組み
FC コンソールでトリガー作成リクエストを送信すると、FC はトリガー設定に基づいて、EventBridge にイベントストリームリソースを自動的に作成します。
トリガーが作成されると、FC コンソールでトリガー情報を表示し、EventBridge コンソールで自動的に作成されたリソースを確認できます。ソースの ApsaraMQ for RocketMQ インスタンスでメッセージがエンキューされると、FC が呼び出されます。各呼び出し中に、バッチ設定に基づいて、1 つ以上のメッセージイベントがバッチとして関数にプッシュされます。この動作は、エンドツーエンドのストリーミングデータ処理シナリオに適しています。
注意事項
-
イベントソースとして機能する ApsaraMQ for RocketMQ インスタンスは、FC の関数と同じリージョンにある必要があります。
-
作成されたイベントストリームの数が上限を超えると、RocketMQ トリガーを作成できなくなります。
単一の Alibaba Cloud アカウント内の単一リージョンでトリガーを作成する際のリソース数の制限については、「制限」をご参照ください。
前提条件
-
EventBridge
-
Function Compute
-
ApsaraMQ for RocketMQ
手順1:トリガーの作成
-
FC コンソールにログインし、管理する関数を見つけ、関数詳細ページで トリガー タブをクリックし、トリガーの作成 をクリックします。
-
[トリガーの作成] パネルで、トリガータイプ を [ApsaraMQ for RocketMQ] に設定し、次の表に従ってパラメーターを設定してから、OK をクリックします。
| パラメーター | 説明 | 例 |
|---|---|---|
| [名前] | カスタムのトリガー名を入力します。 | rocketmq-trigger |
| [バージョンまたはエイリアス] | デフォルト値: LATEST。別のバージョンまたはエイリアス用のトリガーを作成するには、まず関数詳細ページの右上隅でそのバージョンまたはエイリアスに切り替えます。 バージョンとエイリアスの概要については、「バージョン」と「エイリアス」をご参照ください。 | LATEST |
| [Apache RocketMQ インスタンス] | 既存の ApsaraMQ for RocketMQ インスタンスを選択します。 | rmq-zky**** |
| [トピック] | 既存の ApsaraMQ for RocketMQ インスタンスのトピックを選択します。 | topic1 |
| タグ | メッセージフィルタータグを入力します。 このフィルタータグが付いたメッセージが受信された場合にのみ、関数が呼び出されます。 | tag |
| グループ ID | グループ ID を新規作成するか、既存のものを選択します。 既存のビジネスとグループ ID を共有しないでください。そのビジネスのメッセージの送受信に影響が及ぶ可能性があります。 | GID_FC_TRIGGER_**** |
| [コンシューマーオフセット] | ApsaraMQ for RocketMQ メッセージのコンシューマーオフセットを選択します。これは、EventBridge がメッセージのプルを開始する位置です。 有効な値:[最新のオフセット]: 最新のオフセットから消費します。[最初のオフセット]: 最も古いオフセットから消費します。[タイムスタンプ]: 指定したタイムスタンプから消費します。 | 最新のオフセット |
| [呼び出しメソッド] | 関数の呼び出し方法を選択します。 有効な値:[同期呼び出し]: シーケンシャルな呼び出しシナリオに適しています。 単一のイベントまたはバッチで関数が呼び出され、現在の呼び出しが結果を返した後にのみ、次のイベントまたはバッチで関数が呼び出されます。 同期呼び出しリクエスト本文の最大ペイロードは 32 MB です。 詳細については、「同期呼び出し」をご参照ください。[非同期呼び出し]: イベントを迅速に消費します。 単一のイベントまたはバッチで関数が呼び出されると、FC はすぐにレスポンスを返し、次のイベントまたはバッチで関数が呼び出されます。 このプロセス中、関数は非同期で実行されます。 非同期呼び出しリクエスト本文の最大ペイロードは 128 KB です。 詳細については、「非同期呼び出し」をご参照ください。 | 同期呼び出し |
プッシュ設定、再試行ポリシー、デッドレターキューなどの高度な設定については、「トリガーの高度な機能」をご参照ください。
手順2: (オプション) 関数のエントリーパラメーターの設定
ApsaraMQ for RocketMQ のイベントソースは、event 入力パラメーターとして関数に渡されます。 コードを使用して event パラメーターを解析し、それを処理します。 手動で event を関数に渡してトリガーイベントをシミュレートし、関数コードが正しいかどうかを確認できます。
-
関数詳細ページの コード タブで、関数のテスト の横にある
アイコンをクリックし、ドロップダウンリストから テストパラメーターの設定 を選択します。 -
テストパラメーターの設定 パネルで、新規テストイベントの作成 または 既存のテストイベントの変更 を選択し、イベント名とイベント内容を入力して、[OK] をクリックします。
event の形式は次のとおりです。
[
{
"id":"94ebc15f-f0db-4bbe-acce-56fb72fb****",
"source":"RocketMQ-Function-rocketmq-trigger",
"specversion":"1.0",
"type":"mq:Topic:SendMessage",
"datacontenttype":"application/json; charset=utf-8",
"subject":"acs:mq:cn-hangzhou:164901546557****:MQ_INST_164901546557****_BXhFHryi%TopicName",
"time":"2021-04-08T06:01:20.766Z",
"aliyunaccountid":"164901546557****",
"aliyunpublishtime":"2021-10-15T02:05:16.791Z",
"aliyunoriginalaccountid":"164901546557****",
"aliyuneventbusname":"RocketMQ-Function-rocketmq-trigger",
"aliyunregionid":"cn-chengdu",
"aliyunpublishaddr":"42.120.XX.XX",
"data":{
"topic":"TopicName",
"systemProperties":{
"MIN_OFFSET":"0",
"TRACE_ON":"true",
"MAX_OFFSET":"8",
"MSG_REGION":"cn-hangzhou",
"KEYS":"systemProperties.KEYS",
"CONSUME_START_TIME":1628577790396,
"TAGS":"systemProperties.TAGS",
"INSTANCE_ID":"MQ_INST_164901546557****_BXhFHryi"
},
"userProperties":{
},
"body":"TEST"
}
},
{
"id":"94ebc15f-f0db-4bbe-acce-56fb72fb****",
"source":"RocketMQ-Function-rocketmq-trigger",
"specversion":"1.0",
"type":"mq:Topic:SendMessage",
"datacontenttype":"application/json; charset=utf-8",
"subject":"acs:mq:cn-hangzhou:164901546557****:MQ_INST_164901546557****_BXhFHryi%TopicName",
"time":"2021-04-08T06:01:20.766Z",
"aliyunaccountid":"164901546557****",
"aliyunpublishtime":"2021-10-15T02:05:16.791Z",
"aliyunoriginalaccountid":"164901546557****",
"aliyuneventbusname":"RocketMQ-Function-rocketmq-trigger",
"aliyunregionid":"cn-chengdu",
"aliyunpublishaddr":"42.120.XX.XX",
"data":{
"topic":"TopicName",
"systemProperties":{
"MIN_OFFSET":"0",
"TRACE_ON":"true",
"MAX_OFFSET":"8",
"MSG_REGION":"cn-hangzhou",
"KEYS":"systemProperties.KEYS",
"CONSUME_START_TIME":1628577790396,
"TAGS":"systemProperties.TAGS",
"INSTANCE_ID":"MQ_INST_164901546557****_BXhFHryi"
},
"userProperties":{
},
"body":"TEST"
}
}
]
次の表に、data フィールドに含まれるパラメーターを示します。 CloudEvents 仕様で定義されているパラメーターについては、「概要」をご参照ください。
| フィールド | 型 | 例 | 説明 |
|---|---|---|---|
topic |
String | TopicName | トピック名。 |
systemProperties |
Map | RocketMQ システムレベルのメッセージプロパティ。 | |
systemProperties.MIN_OFFSET |
Int | 0 | キュー内の最も古いオフセット。 |
systemProperties.TRACE_ON |
Boolean | true | メッセージトレースの有無。 |
systemProperties.MAX_OFFSET |
Int | 8 | キュー内の最新のオフセット。 |
systemProperties.MSG_REGION |
String | cn-hangzhou | メッセージが送信されたリージョン。 |
systemProperties.KEYS |
String | systemProperties.KEYS | メッセージのフィルタリングに使用されるキー。 |
systemProperties.CONSUME_START_TIME |
Long | 1628577790396 | メッセージ消費の開始時間 (ミリ秒単位)。 |
systemProperties.UNIQ_KEY |
String | AC14C305069E1B28CDFA3181CDA2**** | メッセージの一意のキー。 |
systemProperties.TAGS |
String | systemProperties.TAGS | メッセージのフィルタリングに使用されるタグ。 |
systemProperties.INSTANCE_ID |
String | MQ_INST_123456789098****_BXhFHryi | ApsaraMQ for RocketMQ インスタンス ID。 |
userProperties |
Map | ユーザープロパティ。 | |
body |
String | TEST | メッセージ本文。 |
手順3:関数コードの記述とテスト
トリガーを作成した後、関数コードを記述してテストし、コードが正しいことを確認します。 実際には、ApsaraMQ for RocketMQ イベントが EventBridge を介して FC に配信されると、トリガーが自動的に関数を呼び出します。
-
関数詳細ページの コード タブで、コードエディターにコードを記述し、デプロイメントコード をクリックします。
このトピックでは、Node.js の関数コードを例として示します。
'use strict'; /* 初期化機能を有効にするには、 次のように初期化関数を実装します: exports.initializer = (context, callback) => { console.log('initializing'); callback(null, ''); }; */ exports.handler = (event, context, callback) => { console.log("event: %s", event); // event パラメーターを解析し、イベントを処理します。 callback(null, 'return result'); } -
関数をテストします。
方法1: 関数のエントリーパラメーター
eventを設定してイベントソースをシミュレートした場合は、関数のテスト をクリックします。方法2: ApsaraMQ for RocketMQ コンソールにログインし、使用する ApsaraMQ for RocketMQ インスタンスのトピックを見つけ、[メッセージ送受信テスト] をクリックし、プロンプトに従ってメッセージを送信します。
-
実行が完了したら、関数詳細ページの コード タブで [リアルタイムログ] をクリックして結果を表示します。