ワイルドカードサブスクライブ
MQTTのトピック名は、メッセージルーティングに使用されるUTF-8エンコードされた文字列です。より柔軟性を持たせるために、MQTTは階層的なトピック名前空間をサポートしています。トピックは通常、レベルごとに区切られ、スラッシュ / で区切られます(例:chat/room/1)。ワイルドカードサブスクライブとは、ワイルドカード文字を1つ以上含むトピックフィルターでのサブスクライブのことです。これにより、複数のトピック名にマッチするサブスクライブが可能になります。本ページでは、MQTTでサポートされている2種類のワイルドカードの使い方と、EMQXでワイルドカード文字を含むトピックにサブスクライブする方法を紹介します。
注意
ワイルドカードはサブスクライブにのみ使用可能で、パブリッシュには使用できません。また、多数のクライアントに対してワイルドカードサブスクライブを使用することは、パフォーマンスに影響を与える可能性があるため避けてください。
シングルレベルワイルドカード
+(U+002B)は、トピックの1レベルにのみマッチするワイルドカード文字です。シングルレベルワイルドカードは、トピックフィルターの任意のレベル(最初や最後のレベルも含む)で使用できます。ただし、使用する場合はそのレベル全体を占めなければなりません。トピックフィルター内で複数のレベルにわたって使用可能で、マルチレベルワイルドカードと組み合わせて使うこともできます。以下はシングルレベルワイルドカードの使用例です。
"+" は有効
"sensor/+" は有効
"sensor/+/temperature" は有効
"sensor+" は無効(レベル全体を占めていない)クライアントが sensor/+/temperature にサブスクライブすると、以下のトピックからのメッセージを受信します。
sensor/1/temperature
sensor/2/temperature
...
sensor/n/temperatureただし、以下のトピックにはマッチしません。
sensor/temperature
sensor/bedroom/1/temperatureマルチレベルワイルドカード
#(U+0023)は、トピックの任意のレベル数にマッチするワイルドカード文字です。マルチレベルワイルドカードを使用する場合は、そのレベル全体を占め、かつトピックの最後の文字でなければなりません。例を示します。
"#" は有効で、すべてのトピックにマッチ
"sensor/#" は有効
"sensor/bedroom#" は無効(+ または # はワイルドカードレベルとしてのみ使用可能)
"sensor/#/temperature" は無効(# は最後のレベルでなければならない)クライアントが sensor/# にサブスクライブすると、以下のトピックからのメッセージを受信します。
sensor
sensor/temperature
sensor/1/temperatureMQTTXクライアントでワイルドカードサブスクライブを試す
このセクションでは、MQTTXクライアントを使ってワイルドカードトピックにサブスクライブする方法を説明します。このデモでは、1つのクライアント接続 Demo をパブリッシャーとして作成し、メッセージをパブリッシュします。次に、別のクライアント接続をサブスクライバーとして作成し、以下のワイルドカードトピックにサブスクライブします。
testtopic/+/temperaturetesttopic/#
EMQXとMQTTX Desktopを起動します。New Connectionをクリックして、パブリッシャー用のクライアント接続を作成します。
- Name フィールドに
Demoと入力します。 - Host にローカルホストの
127.0.0.1を入力します(このデモの例として)。 - 他の設定はデフォルトのままにして、Connect をクリックします。
TIP
MQTT接続の作成方法の詳細は、MQTTX Desktopをご参照ください。

- Name フィールドに
Connections ペインの + をクリックして、サブスクライバー用の別の接続を作成します。Name に
Subscriberと入力します。Connections で
Subscriberを選択し、+ New Subscription をクリックします。ポップアップダイアログで、Topic フィールドにtesttopic/+/temperatureと入力します。他のオプションはデフォルトのままにします。
Connections で
Demoを選択します。トピックフィールドにtesttopic/room1/temperatureと入力し、メッセージフィールドにペイロード28 degreeを入力します。送信ボタンをクリックします。同じペイロードでトピックtesttopic/room2/temperatureにもメッセージを送信します。
Connections で
Subscriberを選択します。サブスクライバーがパブリッシャーから送信された異なるトピックの2つのメッセージを受信していることが確認できます。
+ New Subscription をクリックします。ポップアップダイアログで、デフォルトのトピック
testtopic/#を Topic フィールドに入力します。他のオプションはデフォルトのままにします。Connections で
Demoを選択します。トピックフィールドにtesttopic/bedroom/room1/temperatureと入力し、メッセージフィールドにペイロード28 degreeを入力します。送信ボタンをクリックします。Connections で
Subscriberを選択します。メッセージがtesttopic/#のサブスクライブにのみ送信されていることが確認できます。