Skip to content

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

ネームスペースは、ダッシュボードまたはREST APIを使って設定および管理できます。

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

ネームスペースの設定は主に最大セッション数とレートリミッターの設定を含みます。レートリミッターを設定する前に、ネームスペースにおけるレートリミッターの種類と目的を理解することが重要です。具体的な設定オプションについては、ダッシュボードでのネームスペース設定と管理を参照してください。

ネームスペースごとにレートリミッターを設定し、特定のクライアントグループのトラフィックやメッセージフローを制御できます。これらのネームスペースレベルのリミッターは、EMQXの既存のゾーンやリスナーのレートリミッターと併用されます(使用するタイプによります)。

レートリミッターの種類

管理されたネームスペースには、以下の2種類のレートリミッターがあります。

テナントレートリミッター:ネームスペース内のすべてのクライアントで共有されるトークンを割り当てます。このタイプのリミッターが設定されると、既存のゾーンレベルのレートリミッターと合成され、ゾーンとネームスペースのテナントレートリミッターの両方がクライアントに同時に適用されます。

クライアントレートリミッター:ネームスペース内の各クライアントに専用のトークンを割り当てます。このタイプのリミッターが設定されると、既存のリスナーレベルのレートリミッターを置き換え、リスナーのレートリミッターは無視され、ネームスペースのクライアントリミッターが有効になります。

両タイプのリミッターは以下の制限を定義できます。

  • メッセージレート制限:クライアントまたはテナントが一定期間内にパブリッシュできるメッセージの最大数。
  • バイトスループット制限:一定期間内に許可されるメッセージペイロードの最大サイズ。

TIP

詳細はレートリミットのドキュメントを参照してください。

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

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

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

注意

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

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

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

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

    • Max Sessions:デフォルトは infinity(無制限)です。有効にすると、最大セッション数を特定の数値に制限でき、単一のネームスペースで過剰なクライアントによるリソース占有を防止します。最大セッション数を設定する際は、クラスタの容量と整合させ、低すぎる制限による接続拒否を避けてください。

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

      TIP

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

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

      TIP

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

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

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

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

注意

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

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

REST APIでのネームスペース設定と管理

TIP

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

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を提供しており、管理されたネームスペース削除時にはこの処理が自動的に実行されます。