機能

このブローカーは実務の道具として作られています。以下はすべてダッシュボードで設定でき、再起動なしで反映されます。

プロトコル

2 つの版を同時に

MQTT 3.1.1 と MQTT 5.0 は同じポートで同時に動き、どちらの版のクライアントも自由にメッセージをやり取りできます。コーデックは 15 種類すべてのパケットを符号化・復号し、Variable Byte Integer の範囲、重複したプロパティ、予約ビットを検証します。

QoS 0、1、2

完全な手順、QoS 2 での重複の抑制、再接続後の未完了なやり取りの再送。永続セッションのオフラインキューはブローカーの再起動を越えて残ります。

retain と Last Will

空のペイロードによる消去に対応した retain メッセージの保管(枝ごとの消去も可)に加え、Retain Handling 0/1/2 と Retain As Published。Will はあらゆる切断の場面で送られ、バージョン 5 の Will Delay Interval にも対応します。

バージョン 5 の機能

双方向のトピックエイリアス、Session Expiry、Receive Maximum とフロー制御、Maximum Packet Size、購読識別子、$share による共有購読、No Local、Message Expiry、UTF-8 検証付きの Payload Format Indicator、Content Type、Response Topic、Correlation Data、User Properties、各パケットの理由コード、サーバー側 DISCONNECT、AUTH パケット。

$SYS システムトピック

バージョン、稼働時間、クライアント・メッセージ・バイト・エラーの各カウンターを retain メッセージとして公開します。この枝は既定で閉じており、ワイルドカードは $ で始まるトピックに届かず、匿名クライアントには名前空間全体が拒否され、設定のスイッチで公開そのものを止められます。

Web ダッシュボード

概要

要約タイル、マシンの状態(CPU、メモリー、データディレクトリのあるディスク)、メッセージ流量・トラフィック・接続数の動くグラフ、活動中のトピック、リスナー、イベントの流れ。

クライアントとトピック

クライアントごとの詳細を備えたセッション表と、セッションの切断・削除。別枠で、MQTT 5.0 のすべての選択肢を含む有効な購読と retain の保管内容も見られます。

トラフィックと発行

フィルターと一時停止を備えた、メッセージとブローカーイベントのリアルタイムな流れ。ダッシュボードから直接、バージョン 5 のすべてのプロパティを付けてメッセージを発行できます。デバイスの検証に便利です。

7 言語、2 テーマ

ロシア語、英語、ドイツ語、スペイン語、フランス語、イタリア語、中国語。ダークとライトのテーマはその場で切り替わり、選択はダッシュボードの既定として記憶されます。

内蔵ヘルプ

目次付きの手引きがダッシュボードの中にあり、7 言語すべてに翻訳されています。ほかでドキュメントを探す必要はありません。

アクセスと安全性

独立した 2 つの系統

ダッシュボードの管理者は config.json で定義される 1 人だけで、扱うのは Web インターフェースのみです。MQTT デバイスは別のアカウント一覧で、独自のパスワードと権限を持ちます。管理者と同じ名前の MQTT ユーザーを作ろうとすると拒否されます。

トピック ACL

ルールはフィルター、アクセス種別(read、write、readwrite)、許可か拒否かの判断で構成されます。上から順に最初に一致したものが適用され、既定はすべて拒否です。プレースホルダー $u はクライアント名に展開されるので、$u/# というルールだけで各デバイスを自分の枝に閉じ込められます。順序はドラッグで変更できます。

6 つの認証情報の取得元

内蔵リスト、MySQL/MariaDB(EMQX 風のスキーマ)、SQLite、ファイル再読み込みに対応した CSV、JWT、外部 HTTP サービス。取得元はダッシュボードで切り替え、まず「テスト」ボタンで確認してから稼働中に適用します。

パスワードではなくハッシュ

パスワードは PBKDF2-HMAC-SHA256、21 万回の反復とランダムなソルトで保存されます。セッションと API のトークンもハッシュのみを保持します。外部の取得元は plain、sha256、sha512、bcrypt、pbkdf2 を解釈します。

最初から TLS

初回起動時に自己署名証明書を生成するので、:8883 はすぐに使えます。本番では自前の証明書を設定に記載してください。

ルールと流れ

トピックの書き換え

発行時、購読時、あるいは常に、トピック名をその場で置き換えます。安価な絞り込みのための MQTT フィルター、正規表現、$1…$9 のグループを使える宛先テンプレートで構成します。%u と %c が使え、$share の接頭辞は保たれ、UNSUBSCRIBE も同じ書き換えを通ります。ダッシュボードにはルールを試す領域があります。

自動購読

クライアントは接続直後に購読を受け取ります。SUBSCRIBE は不要です。%u と %c、バージョン 5 のすべての選択肢に対応し、ACL は通常どおり確認されます。許可されないルールは黙って飛ばされ、接続は切れません。

トピック制限

トピックパターンごとのルールで、流量を一定の頻度まで間引くか、丸ごと捨てます。間引きでは最新値が残るので、毎秒 10 回送るセンサーは毎秒 1 件、しかも最も新しい値になります。ルールの詳細画面には、一致・通過・破棄の件数が表示されます。

フラッド制御

接続ごとのトークンバケット。毎秒のメッセージ数、バースト、毎秒のバイト数、バイトのバースト。超過しても接続は切れず、メッセージも失われません。ブローカーは次のソケット読み取りの前に少し待ち、TCP がウィンドウを閉じ、送信側が自然に速度を落とします。

遅延配信

$delayed/{秒}/{トピック} はブローカーが期限まで預かります。EMQX 互換です。間隔は 1 秒から 49 日まで、確認応答はすぐに返り、待ち行列は再起動を越えて残り、ダッシュボードで残り時間とともに確認できます。

連携

ブローカー間ブリッジ

ブローカーがクライアントとして別の MQTT ブローカーに接続し、トピックを双方向に転送します。アドレス、認証情報、TLS、プロトコル版、フィルター+方向+QoS+接頭辞から成るルールを設定できます。ループ防止、自動再接続、バージョン 5 での No Local、ダッシュボードのカウンターを備えます。

REST API

ダッシュボードでできることはすべてベアラートークンで利用できます。統計、クライアント、購読、retain メッセージ、発行、イベント、ユーザー、設定、ブリッジ、ルール、遅延メッセージ、インポートとエクスポート。トークンは読み取り専用でも発行できます。

自分のシステムからデバイスを登録

POST /api/users でデバイスを権限ごと作成し、PATCH でパスワードや ACL を変更、DELETE で削除します。変更は即座に効きます。ブローカーがそのユーザーの現在の接続を自ら切るので、新しいルールがすぐに適用されます。

WebSocket 上の MQTT

ダッシュボードと同じポートで mqtt サブプロトコルを提供します。ブラウザーのクライアントは別のゲートウェイなしに接続できます。RFC 6455 は net/http の上に依存関係なしで実装しています。

インポートとエクスポート

設定、ユーザー、ルールを 1 つのファイルに書き出し、読み戻せます。別のサーバーへ移すのに手作業のやり直しは要りません。

運用

1 つのファイル、依存関係なし

静的リンクされた純 Go のバイナリ。実行環境も libc も外部データベースも不要です。Debian と Ubuntu では準備なしに動き、amd64、arm64、armhf 向けにビルドできます。

SQLite への保存

retain メッセージは変更のたびに即座に書き込み、永続セッションは 10 秒ごとと終了時に保存し、遅延メッセージは待ち行列に入れた時点で書き込みます。期限切れは起動時に捨てられ、state restored の行がログに残ります。

マシンの状態

CPU 負荷、使用中のメモリー、データ用ディスクの空き容量を、標準ライブラリのみで、cgo を使わず、Linux と Windows それぞれの実装で算出します。バーは 75 % を超えると橙、90 % を超えると赤になります。

systemd と nginx

systemd のユニット、nginx の設定、何度実行しても同じ結果になるインストールスクリプトが付属します。ダッシュボードは localhost だけで待ち受けて nginx 経由で公開し、MQTT のポートは直接動きます。

ビルド情報

バージョン、ビルド番号、ビルド日時がバイナリに埋め込まれ、ダッシュボード、バージョン情報の画面、-version オプションで確認できます。何が動いているのかを常に正確に把握できます。

これらすべてが無料

デバイス数、メッセージ数、購読数に制限はありません。

ブローカーをダウンロード