Skip to content

オフラインメッセージ

このプラグインは、サブスクライバーがオンラインでない場合に選択された QoS 1/2 のメッセージを永続化し、後で一致するサブスクライバーがオンラインになった際にそれらを再生します。

対応バックエンド:

  • MySQL
  • Redis

設定

プラグインは標準の EMQX プラグイン設定 API を通じて設定します:

PUT /api/v5/plugins/<name-vsn>/config

スキーマは priv/config.hocon に定義されており、Redis と MySQL 向けのバックエンド固有の設定を含みます。

プラグインがメッセージを永続化する条件は以下の通りです:

  • パブリッシュの QoS が 0 より大きい
  • トピックが設定された message.topic_filter のいずれかにマッチする

ビルドとテスト

リポジトリのルートからプラグインをビルドします:

bash
make

このプラグインの Common Test スイートを実行します:

bash
make plugins/emqx_offline_messages-ct

データベーススキーマ

MySQL

sql
CREATE TABLE IF NOT EXISTS `mqtt_msg` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `msgid` varchar(64) DEFAULT NULL,
  `topic` varchar(180) NOT NULL,
  `sender` varchar(64) DEFAULT NULL,
  `qos` tinyint(1) NOT NULL DEFAULT '0',
  `retain` tinyint(1) DEFAULT NULL,
  `payload` blob,
  `arrived` datetime NOT NULL,
  PRIMARY KEY (`id`),
  INDEX topic_index(`topic`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8MB4;
sql
CREATE TABLE IF NOT EXISTS `mqtt_sub` (
  `clientid` varchar(64) NOT NULL,
  `topic` varchar(180) NOT NULL,
  `qos` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`clientid`, `topic`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8MB4;

Redis

Redis は mqtt:sub:* および mqtt:msg:* キースペースの下でハッシュとソート済みセットを使用します。

  • サブスクリプション状態はクライアント ID をキーとするハッシュに保存されます。
  • メッセージペイロードはメッセージ ID をキーとするハッシュに保存されます。
  • トピックインデックスはトピックをキーとするソート済みセットに保存されます。

ダウンロード

各 EMQX リリース向けの tarball:

EMQX バージョンプラグインバージョンパッケージ
6.1.22.0.0emqx_offline_messages-2.0.0.tar.gz
6.1.32.0.0emqx_offline_messages-2.0.0.tar.gz