Skip to content

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

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

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

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

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

レートリミッターの種類

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

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

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

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

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

TIP

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

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

ダッシュボードの左側メニューから 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

詳細かつ最新のリクエスト・レスポンスのエンドポイントスキーマは、ダッシュボードのリスナーが提供する /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を提供しており、管理されたネームスペース削除時にはこの処理が自動的にトリガーされます。