1.8. バックプレッシャー 【OP-Addon】

Operability Add-onを利用すると、 ICE Core内でMQTTのコネクション接続/切断や、送信バッファからのデータ削除、HTTPリクエストの成功/失敗など、クラウドアダプタに関するイベントをデバイスアダプタ、エッジアプリケーション、Node-REDフローに通知する機能を利用することができます。

1.8.1. バックプレッシャーイベント通知

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ノードについては、イベント通知受信用ノードを参照してください。

1.8.2. メッセージフォーマット

通知のメッセージフォーマットは下記の通りです。

{
    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: ""    //リクエスト送信中にエラー発生した場合のみ、エラーメッセージを格納
    }
}