クイックスタート:ネームスペースの体験
本セクションでは、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をシミュレートする2つの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 として設定する必要があります。