コンテキスト・コンシューマは、同期的にクエリを実行して情報を取得すること(上記の「コンテキスト情報を更新およびクエリする方法」で説明したように)とは別に、通知を使用してコンテキスト情報を非同期的に取得することもできます。このシナリオでは、Context Broker GEは、特定の条件(サブスクリプション要求で指定)で通知を送信するように”プログラム”されています。

NiceEatingの場合、アプリケーションのバックエンドはサブスクリプションを使用できるため、新しいレビューがどのユーザによって更新されるたびに、バックエンドに通知されます(レストランの平均レーティングを再計算してContext Broker GEに公開する)。

POST <cb_host>:<cb_port>/v2/subscriptions

Headers:

{
  'Content-Type':     'application/json',
  'Fiware-Service':   'tourguide'
}

Payload:

{
  "description": "Update average rating",
  "subject": {
    "entities": [
      {
        "idPattern": ".*",
        "type": "Review"
      }
    ],
    "condition": {
      "attrs": [
        "ratingValue"
      ]
    }
  },
  "notification": {
    "http": {
      "url": "http://backend.niceeating.foo.com:1028/ratings4"
    },
    "attrs": [
      "ratingValue",
      "itemReviewed"
    ]
  },
  "expires": "2020-04-05T14:00:00.00Z",
  "throttling": 5
}

もう1つのケースは、特定のレストランの平均レーティングの変更をサブスクライブするアプリケーションです。これはレストランのスコアがどのように発展しているかを知るために、レストランのオーナーにとって有益です。

POST <cb_host>:<cb_port>/v2/subscriptions

Headers:

{
  'Content-Type':     'application/json',
  'Fiware-Service':   'tourguide'
}

Payload:

{
  "description": "Get aggregateRating for Elizalde",
  "subject": {
    "entities": [
      {
        "id": "0115206c51f60b48b77e4c937835795c33bb953f",
        "type": "Restaurant"
      }
    ],
    "condition": {
      "attrs": [
        "aggregateRating"
      ]
    }
  },
  "notification": {
    "http": {
      "url": "http://myapp.foo.com:1028/restaurant_average_scorings"
    },
    "attrs": [
      "aggregateRating",
      "name"
    ]
  },
  "expires": "2020-04-05T14:00:00.00Z",
  "throttling": 5
}