この例は、Cepheus-CEP と Cepheus-Broker がどう相互作用するかを示しています。
ルームとフロアの例に基づいています。しかし今回は、温度データが Cepheus-CEP に直接送信されるのではなく、Cepheus-Broker を経由して送信されます。
アーキテクチャ¶
この例では、NGSI センサ (run.shスクリプトでシミュレート)が温度データを Cepheus-Broker に送信します。Cepheus-CEP はこのデータのブローカに加入するため、新しいデータが受信されたときに通知を受けます。
これを次の図に示します :
灰色の部分はリファレンス・アーキテクチャの一部であり、この例では使用されません。
CEPの設定¶
設定は最初の例と似ていますが、今、in
セクションに providers
を追加します。これにより、ルームのコンテキスト・エンティティを1つ以上のコンテキスト・プロバイダ(ここでは Cepheus-CEP インスタンス)に登録するように CEP に指示します。
"in": [
{
"id":"Room.*", # Pattern is used to subscribe to provider to all Room1, Room2, ..., RoomN
"type":"Room", # The type to subscribe
"isPattern":true, # Pattern match the id
"providers":[ "http://localhost:8081" ], # The URL of the source of the input
"attributes":[
{ "name":"temperature", "type":"double" },
{ "name":"floor", "type":"string" }
]
}
]
out
セクションは、最初の例と似ていますが、brokers
セクションを追加して、このコンテキスト・エンティティの更新を Cepheus-Broker に送信します。
"out":[
{
"id":"Floor1",
"type":"Floor",
"attributes":[
{ "name":"temperature", "type":"double" }
],
"brokers": [
{ "url":"http://localhost:8081" }
]
}
]
config.jsonは、完全な設定のセットアップを持っています。
この設定では、平均時間がログにすぐに表示されるように、出力時間を10秒に短縮しました。
セットアップをテスト¶
最初の端末で、Cepheus-Broker を起動します。リモート・ブローカ転送を無効にします :
cd cepheus-broker
mvn spring-boot:run -Dremote.url=
デフォルトの設定では、マシン上の port :8081 で起動する必要があります。
次に、第2の端末で、Cepheus-CEP を起動します :
cd cepheus-cep
mvn spring-boot:run
デフォルト設定では、マシン上の port :8080 で起動する必要があります。
今度は別のターミナルで、run.sh スクリプトを起動します :
cd doc/examples/3_CepAndBroker
sh run.sh
このスクリプトはまず config.json ファイルを Cepheus-CEP に送信します。
Cepheus-CEP は、Cepheus-Brokerからルームのコンテキスト・エンティティの通知を受け取るための subscribeContext
リクエストを送信します。
次に、スクリプトは、Cepheus-CEP に通知を送信する Cepheus-Broker に 温度更新を送信します。
最初に LB を起動したターミナルに戻り、CEP の後に戻ります。CEP ログに記録された "EventIn" として温度が表示されます。
数秒後、 "EventOut" ログに各フロアの平均温度をトリガする CEP が表示されます。
注意 : Cepheus-Broker のログには、リモート・ブローカを設定していないという警告が表示されるはずです : 転送を無効にするために、-Dremove.url=
を使用したとして、 "No remote.url parameter defined to forward updateContext"
次のステップ¶
EventOut アップデートをリモート NGSI ブローカに送信する方法を学びます。