Skip to content

開発に関する質問

どのプロトコル接続がサポートされていますか?

EMQXのデプロイメントは、TLS/SSL上のMQTTおよびTLS/SSL上のWebSocketsプロトコル接続をサポートしています。

その他のプロトコルサポートが必要な場合は、チケットを提出するか、メール(cloud-support@emqx.io)でご連絡ください。

ブローカーのカスタムドメインはどのように設定しますか?

EMQX Cloudは、EMQX v5 Dedicatedおよびv5 Dedicated Flexデプロイメントにおいて、ブローカーのカスタムドメインをサポートしています。トライアルデプロイメントではサポートされていません。

必要なDNSのCNAMEレコードやEMQX Cloud管理下のACME検証レコードを含む完全な設定手順は、ブローカーのカスタムドメイン設定をご参照ください。

NATゲートウェイの設定はどのように行いますか?

NATはDedicated Flexプランのみサポートされています。デプロイメント内でNATゲートウェイサービスを有効化できます。

クラスターのスケールアウトはデバイスの接続に影響しますか?

数秒間の接続中断が発生します。

VPCピアツーピア接続を構築した場合、ローカルネットワーク経由で自分のサービスをMQTTサービスに接続するにはどうすればよいですか?

Dedicated Flexデプロイメントに内部ネットワーク接続が必要な場合は、内部エンドポイントを作成して実現できます。これは当社が提供する追加サービスです。

APIはサポートされていますか?

はい。クライアント情報の照会、メッセージの投稿、ルールの作成など外部システムとの連携のためにHTTP APIが提供されています。

詳細はREST APIをご覧ください。

どのようなTLS/SSL認証がサポートされていますか?

片方向双方向、およびカスタム署名の設定をサポートしています。

他のシステムとどのように連携しますか?

データ統合を利用して他のアプリケーションと連携できます。詳細はデータ統合をご確認ください。

デバイスの認証データは自分のデータベースに保存しています。MQTT接続の認証を自分のデータベースで行うことは可能ですか?

EMQX Cloud Dedicated Flexはユーザー自身のデータベースからの認証をサポートしています。詳細は外部認証とアクセス制御をご参照ください。

コンソールでデバイスログはどのくらいの期間保持されますか?

EMQX Cloudはデバイスの通信ログは保持せず、デプロイメントのイベントログのみを保持しています。イベントログはデフォルトで7日間保持されます。

デバイスイベントはどのくらいの期間保存されますか?

デバイスイベントデータは、イベントトピックを通じてサードパーティのストレージに永久的に統合可能です。

オフラインメッセージは利用可能ですか?

一般的に、MQTTクライアントはオフライン時にはメッセージを受信しません。ただし、クライアントが固定のClientIDを持ち、clean_sessionがfalseであり、QoS設定がサーバーの要件を満たしている場合、サーバーはクライアントがオフラインの間に一定量のオフラインメッセージを保持し、再接続時に送信できます。

オフラインメッセージは、ネットワーク接続が不安定な場合やQoSに特定の要件がある場合に有用です。

クライアントがオフライン時にQoS 0メッセージをキューイングするには、セッションでQoS 0メッセージの保存を有効にする必要があります。対応するデプロイメントでは、デプロイメント設定 -> MQTT設定 -> セッションの下にあるStore QoS 0 Messageを確認・変更できます。詳細はセッション設定をご覧ください。この設定はディスクへのパーシステンスを提供しません。

オフラインメッセージはどのくらいの期間保持されますか?

MQTT v3プロトコルではデフォルトで2時間、MQTT v5プロトコルではクライアントのsession_expiry_intervalの値に従って設定されます。期限切れ後、キュー内のメッセージは失われます。

オフラインメッセージのステージングはどのように行いますか?

メッセージのステージングは不安定なため、オフラインメッセージの保存を推奨します。ディスクへの保存が推奨され、ここではデータ統合を利用してRedisなどのデータベースにオフラインメッセージを保存します。デバイスがオンラインになりメッセージを消費すると、対応するオフラインメッセージも削除されます。

セッション数はどのように計算されますか?

セッションの定義:セッション数は、接続中のクライアント数と、ブローカーにセッションを保持している切断済みクライアント数の合計で計算されます。接続中のクライアントは、CONNECT後にブローカーに接続し、keepAlive期間内に切断されていないクライアントを指します。セッションを保持する切断済みクライアントは、オフラインでCleanSessionがfalseに設定されているクライアントで、これらもセッション数に含まれます。デバイスがDISCONNECTでオフラインになるか、keepAlive期間以上通信がない場合、そのデバイスはオフラインとなりセッション数にカウントされません。

TPSに関する質問

メッセージTPSとは何ですか?

**メッセージTPS(Transactions Per Second)**は、EMQXデプロイメントで1秒あたりに処理されるメッセージ数を測る指標です。メッセージTPSはEMQXの入出力メッセージの合計レートを含みます。

  • メッセージ受信TPS:クライアントがMQTTやHTTP API経由でパブリッシュしたメッセージ、データ統合ソースから取り込まれたメッセージ、メッセージ再パブリッシュアクションで生成されたメッセージの1秒あたりの数。
  • メッセージ送信TPS:クライアントがサブスクライブしたMQTTメッセージや、データ統合を介して外部システムに転送されるメッセージの1秒あたりの数。

メッセージTPSにはどのような操作が含まれますか?

メッセージTPSには全てのメッセージデータ交換が含まれます。

メッセージ受信

EMQXデプロイメントに流入するメッセージで、以下を含みます:

  • MQTT PUBLISH:クライアントがMQTTプロトコルでパブリッシュしたメッセージ。
  • HTTP PUBLISH:HTTP API(例:POST /mqtt/publishや/mqtt/publish_batch)経由でパブリッシュされたメッセージ。
  • データ統合ソース:データ統合ソースを通じて外部システムから取り込まれたメッセージ。
  • メッセージ再パブリッシュ:メッセージ再パブリッシュアクションで生成されたメッセージ。

メッセージ送信

EMQXデプロイメントから送信されるメッセージで、以下を含みます:

  • MQTTサブスクリプション:クライアントが特定のトピックをサブスクライブして受信するメッセージ。
  • データ統合転送:EMQXから外部サービスに転送されるメッセージや、外部サービスから受信してクライアントに転送されるメッセージ。

メッセージTPSに含まれない操作は何ですか?

以下のメッセージは実際のメッセージデータ交換を伴わないため、メッセージTPSの計算に含まれません:

  • 接続操作:MQTTのCONNECTやCONNACKなどの操作はTPSに含まれません。
  • サブスクリプション操作:MQTTのSUBSCRIBEやSUBACKなどの操作はTPSに含まれません。

なぜデータ統合の転送メッセージがメッセージTPSに含まれるのですか?

データ統合転送はEMQXと外部サービス間のメッセージ交換を伴い、CPU、メモリ、帯域幅などのシステムリソースを消費します。したがって、適切なリソース割り当てとサービス安定性の最適化のために、データ統合転送のメッセージレートもメッセージTPSの計算に含まれます。

メッセージTPSの上限を超えた場合はどうなりますか?

メッセージTPSがデプロイメントの上限を超えると、超過分のメッセージは破棄されます。メッセージTPS上限超過によるサービス停止はEMQX Cloud SLAの対象外です。詳細はサービスレベルアグリーメント(SLA)をご参照ください。

なぜトラフィック統計に差異があるのですか?

デプロイメント概要のトラフィック統計とメトリクスで計算されたメッセージパケットトラフィックの合計に差異がある場合、これは主にメッセージパケットトラフィック統計がMQTTプロトコル(MQTTおよびWSを含む)のアプリケーション層クライアントメッセージのパブリッシュ、接続、サブスクリプションのトラフィックのみを対象としているためです。データ統合、TLS処理、TCP層で発生するトラフィックは含まれていません。そのため、TLSおよびデータ統合から発生するトラフィックによって大きな差異が生じます。

JavaクライアントがQoS 1またはQoS 2メッセージをEMQX Cloudにパブリッシュする際の「Too Many Publishes in Progress」エラーの対処方法は?

JavaクライアントがQoS 1またはQoS 2メッセージをパブリッシュする際、「Too many publishes in progress」エラーは通常、インフライトメッセージの上限によって発生します。デフォルトでは:

  • Java SDKはmaxInflight10に設定しており、最大10件の未アックメッセージを同時に許容します。
  • EMQX Cloudのクライアントごとのレート制限は1,500メッセージ/秒です。
  • EMQXクラスターのレート制限は、ご契約のデプロイメントプランのTPS上限に準じます。

パブリッシュ性能を向上させたい場合は、maxInflightパラメータを調整してインフライトキューサイズを増やせます。例:

java
MqttConnectOptions options = new MqttConnectOptions();
options.setMaxInflight(100); // 必要に応じて増やす。デフォルトは10
mqttClient.connect(options);

推奨パブリッシュレート

  • QoS 1メッセージ:最大300 msg/s
  • QoS 2メッセージ:最大150 msg/s

maxInflightを増やすことで、インフライトキューの満杯によるエラーを防ぎ、メッセージを期待通りにパブリッシュできます。