バックプレッシャー¶
Operability Add-onを利用すると、 ICE Core内でMQTTのコネクション接続/切断や、送信バッファからのデータ削除、HTTPリクエストの成功/失敗など、クラウドアダプタに関するイベントをデバイスアダプタ、エッジアプリケーション、Node-REDフローに通知する機能を利用することができます。
バックプレッシャーイベント通知¶
ICE Coreからの各種通知を、デバイスアダプタ、エッジアプリケーション、Node-REDノードで受信するための機能です。
現在対応している通知一覧を下記に記載します。
クラウドアダプタに関する通知:
イベント名(event) | 通知内容 | 通知先 | 通知タイミング |
---|---|---|---|
status | クラウドアダプタの状態 | 全て | AP起動時・イベント発生時 |
result | メッセージ送信結果 | データ送信元 | イベント発生時 |
データ送信元は、イベントデータに含まれるobject_idないしapp_nameにより識別します。 object_id、app_name両方が含まれる場合、object_idの値を優先します。 object_idはデバイスアダプタでイベントデータをエミットしたときやice device adapterノードをデータが通過した際に挿入され、app_nameはエッジアプリケーションで イベントデータをエミットしたときに挿入されます。
クラウドアダプタの種別ごとに、下記のようなイベントが通知されます。
クラウドアダプタ種別(type) | イベント名(event) | 値(data) | 説明 |
---|---|---|---|
mqtt | status | available | コネクション接続 |
mqtt | status | unavailable | コネクション切断 |
mqtt | result | success | バックエンドからの受領応答を受信 |
mqtt | result | failure | 送信バッファからメッセージ削除 |
http | status | available | HTTPアダプタのリクエスト受付開始 |
http | status | unavailable | HTTPアダプタの初期化失敗 |
http | result | success | リクエスト送信成功(ステータスコード2xx) |
http | result | failure | リクエスト送信失敗(ステータスコード2xx以外) |
aws_iot | stauts | available | コネクション接続 |
aws_iot | status | unavailable | コネクション切断 |
aws_iot | result | success | バックエンドからの受領応答を受信 |
aws_iot | result | failure | 送信バッファからメッセージ削除 |
イベント通知機能はデフォルト無効化されており、設定ファイルで有効/無効の切り替えが可能です。
また、デバイスアダプタ、エッジアプリケーションで通知を有効化するために、config.jsonに設定が必要です。
設定方法については、Operability Add-onに関連する設定を参照してください。
通知受信用のNode-REDノードについては、イベント通知受信用ノードを参照してください。
メッセージフォーマット¶
通知のメッセージフォーマットは下記の通りです。
{
type: "notification", //固定値
notification_type: "", //通知の種別
payload: { // 通知内容
}
}
クラウドアダプタに関する通知の場合、下記のようなメッセージフォーマットとなります。
- status
{
type: "notification",
notification_type: "cloud_adapter",
payload: {
event: "status", //イベント名
data: "available", //クラウドアダプタが利用可能かどうか(available/unavailable)
destination: "", //イベント発生したDestinationの名前
sub_id: "", //イベント発生したDestinationのサブID(ICEの場合はDirection、EEPの場合はClient IDの値)
type: "" //mqtt、http、aws_iotなど、Destinationの種別
}
}
- result
{
type: "notification",
notification_type: "cloud_adapter",
payload: {
event: "result", //イベント名
data: "success", //メッセージ送信に成功したかどうか(success/failure)
type: "", //mqtt、http、aws_iotなど、Destinationの種別
msg: { //イベント発生したメッセージ
},
detail: { //イベントの詳細情報(httpのstatus_codeなど)
}
}
}
例)typeがhttpのdestinationでメッセージ送信を行った場合
type: "notification",
notification_type: "cloud_adapter",
payload: {
event: "result",
data: "success",
destination: "app",
type: "http",
msg: {
hoge: "fuga"
},
detail: {
status_code: 400,
response: [], //レスポンス取得できた場合のみ、レスポンスを格納
error: "" //リクエスト送信中にエラー発生した場合のみ、エラーメッセージを格納
}
}