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.3.02.0.1emqx_offline_messages-2.0.1.tar.gz (sha256)