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

[OK] をクリックします。
呼び出しメソッド
メッセージが到着したときに関数を呼び出す方法を Function Compute で選択します。
| メソッド | 最大ペイロード | 動作 | 使用するケース |
|---|---|---|---|
| 同期呼び出し | 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-chengdu",
"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-chengdu",
"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 | EventBridge | メッセージ本文内のユーザーデータ |
props | Map | メッセージ属性 | |
contentEncoding | String | utf-8 | メッセージ本文のエンコーディング |
messageId | String | f7622d51-e198-41de-a072-77c1ead7**** | 一意のメッセージ ID |
envelope | Map | AMQP エンベロープメタデータ | |
deliveryTag | Int | 98 | ブローカーによって割り当てられた配信タグ |
exchange | String | | メッセージを送信する exchange の名前 |
redeliver | Boolean | false | メッセージを再送信できるかどうかを指定します。有効な値:true または false |
routingKey | String | housekeeping | メッセージをキューに配信するために使用されるルーティングキー |
ステップ 3:関数コードの作成とテスト
エディターでコードを記述して、関数が受け取る event 配列を解析および処理します。コードをデプロイした後、以下の 2 つの方法のいずれかを使用してテストします。
[コード] タブで、機能コードを記述し、[コードをデプロイ] をクリックします。 以下の Node.js の例では、raw イベントをログに記録し、結果を返します。
'use strict'; /* 初期化関数の機能を有効にするには、 以下のように initializer 関数を実装してください: exports.initializer = (context, callback) => { console.log('initializing'); callback(null, ''); }; */ exports.handler = (event, context, callback) => { console.log("event: %s", event); // イベントパラメーターを解析し、イベントを処理します。 callback(null, 'return result'); }次のいずれかの方法で関数をテストします。
シミュレートされたイベント: [関数をテスト] をクリックして、ステップ 2 で設定したテストパラメーターで実行します。
実際のメッセージ: ApsaraMQ for RabbitMQ コンソールにログオンし、キューを選択して [メッセージの送信] をクリックしてメッセージを公開します。トリガーが自動的に起動します。

実行後は、[リアルタイムログ]で結果を確認してください。

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