SERVICE

MQTT Engine

Cams のデバイス群のための MQTT。MQTT Engine は EMQX の背後で動作するバックエンドのコンシューマーで、共有の勤怠・稼働状況トピックをサブスクライブし、HTTP や TCP のトランスポートと同じ勤怠パイプラインにイベントを流し込み、サーバーからデバイスへのコマンドエンベロープを発行します。

概要

勤怠イベントを取り込み、EMQX ブローカー経由でデバイスコマンドをプッシュする MQTT 伝送エンジン。大規模な接続デバイス群向けに設計されています。

MQTT Engine は、Cams エンジンファミリーにおける MQTT のトランスポートで、HTTP や永続 TCP と並ぶ存在です。EMQX ブローカーの背後で、バックエンドのコンシューマーとして動作します。api/mqtt/v1/{sn}/ 配下の共有勤怠・稼働状況トピックをサブスクライブし、各イベントを共有パイプラインに流し込み、サーバーからデバイスへのコマンドを、前方互換性のある JSON エンベロープとしてコマンドトピックに発行します。EMQX がデバイスの TLS セッション、認証、QoS、last-will を終端し、複数のエンジンインスタンスが、大規模なデバイス群向けに EMQX の共有サブスクリプションで負荷分散します。

SERVICEMQTTEMQXTLSJSONC++
MQTT トピック体系(EMQX)
# device -> server (attendance)
api/mqtt/v1/{sn}/evt   { "user_id":"1001", "att_time":"...", "att_state":1 }
# device -> server (presence / LWT)
api/mqtt/v1/{sn}/st    { "online": true }
# server -> device (command)
api/mqtt/v1/{sn}/cmd   { "id":"c1", "op":"sync_user", "data":{} }

機能

できること

MQTT による取り込み

共有のイベントトピックをサブスクライブし、各勤怠イベントを、HTTP や TCP と同じ保存・プッシュのパイプラインに流し込みます。

稼働状況の追跡

稼働状況トピックと last-will を受信し、ブローカーが検知した切断によってデバイスをオフラインとして記録します。

コマンドのプッシュ

キューに入ったサーバーからデバイスへのコマンドを、デバイスごとのコマンドトピックに、QoS 1 の JSON エンベロープとして発行します。

水平スケーリング

EMQX の共有サブスクリプションが、大規模なデバイス群向けに、複数のエンジンインスタンス間で勤怠の負荷を分散します。

特長

すべて含まれています

  • 勤怠のための MQTT トランスポートのフロントエンドで、HTTP やネイティブ TCP エンジンと対等な存在
  • アプリと EMQX の ACL に整合した、api/mqtt/v1/{sn}/{evt|cmd|st} のトピック体系
  • EMQX の背後で動作するバックエンドのコンシューマー: 共有サブスクリプションで N 個のインスタンスに負荷分散
  • HTTP の punch ボディとペイロードが同一の勤怠イベントを、共有パイプラインに取り込み
  • ステータストピックによる稼働状況と last-will で、切断時にデバイスをオフラインとして記録
  • サーバーからデバイスへのコマンドプッシュを、前方互換性のある {id, op, data} の JSON エンベロープとして QoS 1 で送信
  • ブローカーへの TLS 接続と CA 検証。エンジンはデバイスのシリアル番号ではなく、バックエンドのアカウントを使用
  • Eclipse Paho C++ によるクロスプラットフォームビルド(Linux と Windows)

MQTT Engine で構築する

キーを取得し、ドキュメントを読んで、リリースしましょう。最初の連携は私たちのチームがサポートします。

よくある質問

よくある質問

MQTT Engine と EMQX はどのような関係ですか?

EMQX は、デバイスの TLS セッション、認証、QoS、last-will を終端するブローカーのままです。MQTT Engine は、共有トピックをサブスクライブして勤怠を取り込み、デバイスにコマンドを発行するバックエンドのコンシューマーです。

MQTT Engine のインスタンスを複数実行できますか?

はい。EMQX の共有サブスクリプションが、稼働中のすべてのインスタンスに勤怠・稼働状況トピックを負荷分散するため、インスタンスを追加するだけでスケールできます。

サーバーからデバイスへのコマンド形式は何ですか?

コマンドトピックに QoS 1 で送る JSON エンベロープ {id, op, data} です。必須フィールドは op のみで、前方互換性のため、古いデバイスは未知の op を無視します。

関連情報

プラットフォームをもっと見る