クイックスタート:ネームスペースの体験
このセクションでは、MQTTXクライアントを使用してEMQXに接続し、ネームスペース機能のコア機能であるテナント識別、クライアントおよびトピックの分離、ACL分離を素早く体験する方法を案内します。
ネームスペースソースを有効化する(tns属性の生成)
ネームスペースソースを設定することで、EMQXはクライアントの接続情報からネームスペースを識別し、クライアントが接続すると自動的に対応するネームスペースを作成します。
設定ファイルによる有効化
base.hoconに以下の設定を追加し、ユーザー名からネームスペース識別子を抽出します。
mqtt.client_attrs_init = [
{ expression = "nth(1, tokens(username, '-'))", set_as_attr = tns }
]例
クライアントがユーザー名 tenantA-user1 で接続した場合、EMQXは tenantA をネームスペース識別子として抽出します。
ダッシュボードによる有効化
ダッシュボードでもネームスペースソースを設定できます。
管理 -> ネームスペース -> 設定 に移動します。
ネームスペースを解決するタイミング はデフォルトの 認証前 のままにします。
ネームスペースを取得する場所 に以下の式を入力します。
nth(1, tokens(username, '-'))確定 をクリックして設定を保存します。

ネームスペースの自動作成を確認する
MQTTXを使ってテナント
tenantAを模擬したMQTTクライアント接続を作成します。- ユーザー名:
tenantA-user1 - EMQXに接続します。
- ユーザー名:
ネームスペース ページで、明示的に作成されたネームスペースのみ表示 を無効にします。
ネームスペース
tenantAが自動的に作成されていることを確認します。操作 列の クライアント をクリックし、このネームスペースに接続しているクライアントを表示します。

ネームスペース分離の設定と検証
クライアントIDおよびトピック分離の有効化
異なるネームスペース間でクライアントIDとトピックを分離するには、グローバルネームスペース設定で該当オプションを有効にする必要があります。
設定ファイルによる有効化
base.hoconに以下の設定を追加します。
mqtt.clientid_override = "concat([client_attrs.tns, '-', clientid])"
mqtt.namespace_as_mountpoint = trueこの設定により、
- クライアントIDにネームスペースのプレフィックスが自動的に付与され、ネームスペース間でのクライアントIDの競合を防ぎます。
- ブローカー内部でトピックに
{namespace}/のプレフィックスが自動的に付与され、ネームスペース単位でのトピック分離が可能になります。
ダッシュボードによる有効化
ダッシュボードで 管理 -> ネームスペース -> 設定 に移動します。
以下のオプションを有効にします。
- クライアントID分離(デフォルト値は
concat([client_attrs.tns, '-', clientid])) - ネームスペースをマウントポイントとして使用
- クライアントID分離(デフォルト値は
確定 をクリックして設定を保存します。
クライアントおよびトピック分離の検証
MQTTXを使い、2つのテナント
tenantAとtenantBを模擬したMQTTクライアント接続を作成します。クライアントA(テナント:tenantA):
パラメータ 値 クライアントID client1ユーザー名 tenantA-user1サブスクライブ test/topicクライアントB(テナント:tenantB):
パラメータ 値 クライアントID client1ユーザー名 tenantB-user2パブリッシュ test/topicクライアントBでメッセージをパブリッシュします。MQTTXおよびEMQXダッシュボードで結果を確認します。
- 両クライアントは同じクライアントID(
client1)を使用していますが、プレフィックスルールによりtenantA-client1とtenantB-client1として接続され、競合を回避しています。 - 両クライアントは同じトピック(
test/topic)を使用していますが、ネームスペースで分離されているため、クライアントAはクライアントBがパブリッシュしたメッセージを受信しません。
- 両クライアントは同じクライアントID(
モニタリング -> クライアント ページで以下を確認します。
- クライアントAのサブスクライブトピックは
tenantA/test/topicと表示されます。 - クライアントBのパブリッシュトピックは
tenantB/test/topicと表示されます。
- クライアントAのサブスクライブトピックは


マウントポイントベースのACLチェックを有効化
デフォルトでは後方互換性を維持するため、認可(ACL)チェックはトピックのプレフィックス(マウントポイント)を含みません。つまり、認可ルールは名前空間付きトピック(例:tenantA/test/topic)ではなく、元のトピック名(例:test/topic)に対してマッチングされます。
EMQX 6.1以降では、トピックのプレフィックスを含めた認可チェックを有効にし、ネームスペース単位のACL分離を強制できます。
設定ファイルによる有効化
base.hoconに以下の設定を追加します。
authorization.include_mountpoint = trueダッシュボードによる有効化
ダッシュボードで 管理 -> ネームスペース -> 設定 または アクセス制御 -> クライアント認可 -> 設定 に移動します。
認可にマウントプレフィックスを含める を有効にします。
設定を保存します。
補足
authorization.include_mountpoint = true を有効にすると、すべての認可ルールはトピックマッチングパターンにトピックプレフィックスを含める必要があります。
例えば、クライアントがトピックプレフィックス tenantA/ を持つリスナー経由で接続し、test/topic をサブスクライブする場合、対応する認可ルールは tenantA/test/topic として設定しなければなりません。