Skip to content

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

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

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

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

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

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

レートリミッターの種類

管理対象ネームスペースで利用可能なレートリミッターは2種類あります。

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

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

このリミッターを有効にすると:

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

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

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

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

このリミッターを有効にすると:

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

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

対応する制限の次元

テナントおよびクライアントの両方のレートリミッターは、以下の次元をサポートしています。

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

:::

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

:::

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

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

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

注意

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

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

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

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

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

    • 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を提供しており、管理対象ネームスペース削除時にこの処理が自動的にトリガーされます。