ApsaraMQ for RabbitMQ トリガーを使用すると、RabbitMQ キューにメッセージがエンキューされるたびに Function Compute (FC) の関数を実行できます。この統合は EventBridge を介してメッセージをルーティングするため、ポーリングインフラストラクチャを管理することなく、メッセージを個別またはバッチで処理できます。
仕組み
FC コンソールで ApsaraMQ for RabbitMQ トリガーを作成すると、FC は EventBridge にイベントストリームを自動的に作成します。ソース RabbitMQ インスタンスのキューにメッセージがエンキューされると、EventBridge はそれを CloudEvents 形式のイベントとして関数に配信します。メッセージは、バッチ設定に応じて、一度に 1 つずつ、またはバッチで関数にプッシュされます。
トリガーは FC コンソールで、対応するイベントストリームリソースは EventBridge コンソールで表示できます。
ApsaraMQ for RabbitMQ トリガーは、エンドツーエンドのストリーミングデータ処理シナリオに適しています。
制限事項
-
ApsaraMQ for RabbitMQ インスタンスと FC の関数は、同じリージョンにある必要があります。
-
アカウント内のイベントストリームの数がクォータに達した場合、追加のトリガーを作成することはできません。クォータの詳細については、「制限」をご参照ください。
前提条件
開始する前に、以下の準備ができていることを確認してください:
-
EventBridge を有効化し、必要な権限が付与されていること (「EventBridge の有効化と RAM ユーザーへの権限付与」をご参照ください)
-
FC のイベント関数 (「イベント関数の作成」をご参照ください)
-
vhost とキューが設定されたアクティブな ApsaraMQ for RabbitMQ インスタンス:
ステップ 1:トリガーの作成
-
FC コンソールにログインし、関数の詳細ページに移動します。
-
[設定] タブをクリックし、トリガー ページで [トリガーの作成] をクリックします。
-
トリガーのパラメーターを設定します。設定パネルは次の図のようになります。

-
[OK] をクリックします。
呼び出し方法
FC がメッセージ到着時に関数を呼び出す方法を選択します:
| 方法 | 最大ペイロード | 動作 | 使用シナリオ |
|---|---|---|---|
| [同期呼び出し] | 32 MB | 一度に 1 つのイベントまたはバッチを処理し、関数が戻るのを待ってから次の処理に進みます | 順序が重要なシーケンシャル処理 |
| [非同期呼び出し] | 128 KB | すぐに戻り、次のイベントまたはバッチに進みます。関数はバックグラウンドで実行されます | シーケンシャル処理よりもコンシューム速度が重要な高スループットシナリオ |
詳細については、「同期呼び出し」および「非同期呼び出し」をご参照ください。
プッシュ設定、リトライポリシー、デッドレターキューなどの高度な設定については、「トリガーの高度な機能」をご参照ください。
作成後、トリガーは [トリガー] タブに表示されます。変更または削除するには、「トリガーの管理」をご参照ください。
ステップ 2: (オプション) テストパラメーターの設定
ApsaraMQ for RabbitMQ は、メッセージを event 配列として関数に渡します。実際のメッセージを送信せずにコードをテストするには、手動でイベントをシミュレートします:
-
[コード] タブで、
アイコン ([テスト関数] の横) をクリックし、[テストパラメーターの設定] を選択します。 -
[テストパラメーターの設定] パネルで、[新しいテストイベントの作成] または [既存のテストイベントの変更] をクリックし、イベント名と以下のイベント内容を入力してから、[OK] をクリックします。
以下は、2 つのメッセージを含む event ペイロードのサンプルです:
[
{
"id": "bj694332-4cj1-389e-9d8c-b137h30b****",
"source": "RabbitMQ-Function-rabbitmq-trigger",
"specversion": "1.0",
"type": "amqp:Queue:SendMessage",
"datacontenttype": "application/json;charset=utf-8",
"subject": "acs:amqp:cn-hangzhou:164901546557****:/instances/amqp-cn-tl32e756****/vhosts/eb-connect/queues/housekeeping",
"time": "2021-08-12T06:56:40.709Z",
"aliyunaccountid": "164901546557****",
"aliyunpublishtime": "2021-10-15T08:58:55.140Z",
"aliyunoriginalaccountid": "164901546557****",
"aliyuneventbusname": "RabbitMQ-Function-rabbitmq-trigger",
"aliyunregionid": "cn-hangzhou",
"aliyunpublishaddr": "42.120.XX.XX",
"data": {
"envelope": {
"deliveryTag": 98,
"exchange": "",
"redeliver": false,
"routingKey": "housekeeping"
},
"body": {
"Hello": "RabbitMQ"
},
"props": {
"contentEncoding": "UTF-8",
"messageId": "f7622d51-e198-41de-a072-77c1ead7****"
}
}
},
{
"id": "bj694332-4cj1-389e-9d8c-b137h30b****",
"source": "RabbitMQ-Function-rabbitmq-trigger",
"specversion": "1.0",
"type": "amqp:Queue:SendMessage",
"datacontenttype": "application/json;charset=utf-8",
"subject": "acs:amqp:cn-hangzhou:164901546557****:/instances/amqp-cn-tl32e756****/vhosts/eb-connect/queues/housekeeping",
"time": "2021-08-12T06:56:40.709Z",
"aliyunaccountid": "164901546557****",
"aliyunpublishtime": "2021-10-15T08:58:55.140Z",
"aliyunoriginalaccountid": "164901546557****",
"aliyuneventbusname": "RabbitMQ-Function-rabbitmq-trigger",
"aliyunregionid": "cn-hangzhou",
"aliyunpublishaddr": "42.120.XX.XX",
"data": {
"envelope": {
"deliveryTag": 98,
"exchange": "",
"redeliver": false,
"routingKey": "housekeeping"
},
"body": {
"Hello": "RabbitMQ"
},
"props": {
"contentEncoding": "UTF-8",
"messageId": "f7622d51-e198-41de-a072-77c1ead7****"
}
}
}
]
外側の配列には、バッチ内のメッセージごとに 1 つのオブジェクトが含まれます。トップレベルのフィールドは CloudEvents 仕様に準拠しています。data フィールドには RabbitMQ 固有のコンテンツが含まれます:
data フィールドのパラメーター
| パラメーター | タイプ | 例 | 説明 |
|---|---|---|---|
body |
Map | ユーザー定義のコンテンツを含むメッセージ本文 | |
Hello |
String | RabbitMQ |
メッセージ本文内のユーザーデータ |
props |
Map | メッセージ属性 | |
contentEncoding |
String | utf-8 |
メッセージ本文のエンコーディング |
messageId |
String | f7622d51-e198-41de-a072-77c1ead7**** |
一意のメッセージ ID |
envelope |
Map | AMQP エンベロープメタデータ | |
deliveryTag |
Int | 98 |
ブローカーによって割り当てられた配信タグ |
exchange |
String | |
メッセージを送信するエクスチェンジの名前 |
redeliver |
Boolean | false |
メッセージが以前に配信されたことがあるかどうかを示します。有効な値:true または false |
routingKey |
String | housekeeping |
メッセージをキューに配信するために使用されるルーティングキー |
ステップ 3:関数コードの記述とテスト
エディターで、関数が受け取る event 配列をパースして処理するコードを記述します。それをデプロイし、以下の 2 つの方法のいずれかを使用してテストします。
-
[コード] タブで、関数コードを記述し、[コードをデプロイ] をクリックします。以下の Node.js の例では、raw イベントをログに記録し、結果を返します:
'use strict'; /* initializer 機能を有効にするには、 以下のように initializer 関数を実装してください: exports.initializer = (context, callback) => { console.log('初期化中'); callback(null, ''); }; */ exports.handler = (event, context, callback) => { console.log("event: %s", event); // イベントパラメーターをパースしてイベントを処理します。 callback(null, 'return result'); } -
次のいずれかの方法で関数をテストします:
-
シミュレーションイベント:[関数のテスト] をクリックして、ステップ 2 で設定したテストパラメーターで実行します。
-
実際のメッセージ: ApsaraMQ for RabbitMQ コンソールにログインし、キューを選択して[メッセージの送信]をクリックすると、トリガーが自動的に起動します。

-
-
実行後、[リアルタイムログ] で結果を確認します。

次のステップ
-
既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。
-
プッシュ設定、リトライポリシー、デッドレターキューなどの高度なトリガー設定については、「トリガーの高度な機能」をご参照ください。