Skip to content

開発に関する質問

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

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

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

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

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

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

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クライアントはオフライン時にはメッセージを受信しません。ただし、クライアントIDが固定で、clean_sessionがfalseに設定されており、QoS設定がサーバーの要件を満たしている場合、サーバーはクライアントがオフラインの間に一定量のオフラインメッセージを保持し、クライアントが再接続した際に送信します。

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

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

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経由でEMQXにパブリッシュされるメッセージ数の1秒あたりの数。
  • メッセージ送信TPS:EMQXからクライアントや外部サービスに送信されるメッセージ数の1秒あたりの数。通常はクライアントがサブスクライブしたMQTTメッセージやデータ統合経由で外部システムに転送されるメッセージを含みます。

メッセージ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を増やすことで、インフライトキューの満杯によるエラーを防ぎ、メッセージを正常にパブリッシュできます。