Skip to content

ネームスペースの設定と管理

ネームスペースは、ダッシュボードやREST APIを使って設定および管理できます。セッション制限やレート制限の設定、接続中のクライアント管理などが可能です。

ネームスペースのレート制限

ネームスペースの設定には主に最大セッション数の制限とレートリミッターの設定が含まれます。レートリミッターを設定する前に、ネームスペースに利用可能なレートリミッターの種類とその適用範囲を理解しておくことを推奨します。

具体的なオプションの設定方法については、ダッシュボードによるネームスペースの設定と管理を参照してください。

ネームスペースのレートリミッターは、特定のネームスペース内のクライアントに対するメッセージトラフィックや帯域幅の使用を制御するために使用できます。設定されたレートリミッターの種類に応じて、既存のEMQXのレート制御機構(ゾーンレベルやリスナーレベルのレートリミッターなど)と連携して動作します。

レートリミッターの種類

管理対象のネームスペースに利用可能なレートリミッターは以下の2種類です。

テナントレートリミッター

テナントレートリミッターは、同じネームスペース内のすべてのクライアントで共有されるトークンを割り当てます。

このリミッターが有効な場合:

  • 制限はネームスペース全体に適用されます
  • 既存のゾーンレベルレートリミッターと連携して動作します
  • クライアントはゾーンレベルとネームスペースレベルの両方の制限を満たす必要があります

このタイプは、テナント全体のトラフィックを制御したい場合に適しています。

クライアントレートリミッター

クライアントレートリミッターは、ネームスペース内の各クライアントに専用のトークンを割り当てます。

このリミッターが有効な場合:

  • 制限は個々のクライアントに適用されます
  • リスナーレベルのレートリミッターを上書きします
  • リスナーレベルのレート制限は無視され、ネームスペースのクライアントレートリミッターのみが適用されます

このタイプは、個々のクライアントの動作を細かく制御したい場合に適しています。

対応する制限の次元

テナントレートリミッターとクライアントレートリミッターの両方が以下の次元をサポートしています:

  • メッセージレート制限:クライアントまたはテナントが指定期間内にパブリッシュできるメッセージの最大数
  • バイトスループット制限:指定期間内に送信可能な有効ペイロードサイズの最大値

:::

レート制御の仕組みの詳細については、レート制限を参照してください。

:::

ダッシュボードによるネームスペースの設定と管理

ダッシュボードの左側メニューから Management -> Namespace に移動します。Namespace ページでは、ネームスペースの一覧表示、編集、削除、および各ネームスペースに接続しているクライアントの管理が可能です。

デフォルトでは、ネームスペース一覧には明示的に作成されたネームスペースのみが表示されます。ページ左上のスイッチを切り替えることで、明示的に作成されたネームスペースとEMQXが client_attrs.tns 属性から自動生成したネームスペースの両方を表示できます。

注意

自動生成されたネームスペースはダッシュボード上で編集できません。

ダッシュボードでのネームスペース設定

ネームスペースは作成時に設定するか、後から編集できます。既存のネームスペースを編集する場合は、そのネームスペースの Actions 列にある Edit をクリックします。

  1. Create Namespace ダイアログで以下の設定を行います:

    • Max Sessions:デフォルトは infinity(無制限)です。有効化すると、最大セッション数を指定して、単一ネームスペース内でリソースを占有するクライアント数を制限できます。最大セッション数はクラスターのキャパシティに合わせて設定し、低すぎると接続拒否が発生する可能性があるため注意してください。

    • Tenant Limiter:ネームスペース内のすべてのクライアントのトラフィックを制御します。複数のクライアントが同じインフラを共有する場合、テナントレートリミッターは帯域幅の公平な分配を保証します。デフォルトでは無効です。有効化すると以下のレート制限を設定できます:

      TIP

      この設定の詳細はダッシュボードのツールチップを参照してください。

      • Packet Publish Rate:現在のテナントがEMQXに送信できるバイト数の秒あたり制限
      • Packet Publish Burst:バースト時に追加で送信可能なバイト数
      • Messages Publish Rate:テナントが秒あたりに送信できるメッセージの最大数
      • Messages Publish Burst:バースト時に追加で送信可能なメッセージ数
    • Client Limiter:個々のクライアントのトラフィックを制御します。クライアントレートリミッターはクライアントごとに独立しており、あるクライアントの制限は他のクライアントに影響しません。デフォルトでは無効です。有効化すると以下のレート制限を設定できます:

      TIP

      この設定の詳細はダッシュボードのツールチップを参照してください。

      • Packet Publish Rate:クライアントがEMQXに送信できるバイト数の秒あたり制限
      • Packet Publish Burst:バースト時に追加で送信可能なバイト数
      • Messages Publish Rate:クライアントが秒あたりに送信できるメッセージの最大数
      • Messages Publish Burst:バースト時に追加で送信可能なメッセージ数
  2. 設定完了後、Create をクリックすると新しいネームスペースが一覧に表示されます。

ダッシュボードでのネームスペース削除

ネームスペースを削除するには、Actions 列の Delete をクリックし、確認後にネームスペースが完全に削除されます。

注意

ネームスペースを削除する前に、そのネームスペースに関連付けられたすべてのアクティブなクライアントが適切に切断されていることを確認してください。

特定のネームスペースに接続しているクライアントを表示するには、Actions 列の Clients をクリックします。クライアントの一括切断も可能です。

REST APIによるネームスペースの設定と管理

TIP

詳細かつ最新のリクエストおよびレスポンスのエンドポイントスキーマについては、常に対応するSwagger APIドキュメントを確認してください。これらはダッシュボードのリスナーで /api-docs にて提供されています。

REST APIによるネームスペース一覧取得

EMQXは、必要に応じてネームスペースの詳細一覧を取得するための2つのエンドポイントを提供しています:

エンドポイント対象範囲設定情報含むか
GET /mt/ns_list_detailsすべてのネームスペース(自動生成および明示的に作成されたもの)含まない
GET /mt/managed_ns_list_details明示的に作成された(管理対象の)ネームスペースのみ含まない

両エンドポイントは以下のクエリパラメータをサポートしています:

パラメータデフォルト説明
last_nsString""ページネーション用カーソル。前ページの最後のアイテムの name を渡して次ページを取得します。
limitInteger1001ページあたりに返すネームスペースの最大数。

レスポンスの各アイテムには以下が含まれます:

  • name:ネームスペースの識別子
  • created_at:ネームスペース作成時のUnixタイムスタンプ(秒)

レスポンス例

json
[
  { "name": "ns1", "created_at": 1747917753 },
  { "name": "ns2", "created_at": 1747917754 }
]

特定のネームスペースの完全な設定を取得するには、GET /mt/ns/<namespace>/config を使用します。

REST APIによるネームスペース設定

ネームスペース作成後、PUT /mt/ns/<namespace>/config APIを使って設定を行えます。

このエンドポイントでレート制限やセッション制限、その他ネームスペース固有の設定を行います。設定例は設定例を参照してください。

設定例

以下はREST APIを使ってネームスペースを設定する例です。ns1 ネームスペースのクライアントに対して特定のレート制限を設定し、同時に最大セッション数も制限します。

ネームスペースの作成

設定を適用する前に、ネームスペースが明示的に作成されていることを確認してください。

bash
# リクエストボディは不要です
POST /mt/ns/ns1

重要

クライアントがネームスペースを明示的に作成する前に接続した場合、後から適用されるレートリミッターなどの設定は継承されません。新しい設定を適用するには、該当クライアントを手動で切断し再接続させる必要があります。

レート制限とセッション制限の設定

ネームスペース作成後、以下のように設定を適用します。

PUT /mt/ns/ns1/config

リクエストボディ例:

json
{
  "limiter": {
    "client": {
      "bytes": {
        "rate": "10MB/10s",
        "burst": "200MB/1m"
      },
      "messages": {
        "rate": "3000/1s",
        "burst": "40/30s"
      }
    },
    "tenant": {
      "bytes": {
        "rate": "20MB/10s",
        "burst": "300MB/1m"
      },
      "messages": {
        "rate": "5000/1s",
        "burst": "60/30s"
      }
    }
  },
  "session": {
    "max_sessions": 100
  }
}

この設定は、クライアント固有およびテナント全体の共有レート制限を適用し、ネームスペースの最大セッション数を100に制限します。

ネームスペースのレートリミッター無効化

レート制限を完全に解除したい場合は、再度設定を更新し、リミッターの種類を "disabled" に設定します。

PUT /mt/ns/ns1/config

リクエストボディ例:

json
{
  "limiter": {
    "client": "disabled",
    "tenant": "disabled"
  }
}

REST APIによるネームスペース削除

ネームスペースとその関連設定を削除するには、DELETE /mt/ns/<namespace> APIを使用します。

注意

ネームスペースを削除する前に、そのネームスペースに関連付けられたすべてのアクティブなクライアントが適切に切断されていることを確認してください。EMQXはネームスペース配下のすべてのセッションを一括キックするAPIを提供しており、管理対象ネームスペース削除時にはこの処理が自動的に実行されます。