web-dev-qa-db-ja.com

AzureクラウドのMQTTブローカー

MQTTクライアントがオープンソースのMQTTブローカー(Mosquitto)に接続されたバックエンドデバイスがあります。一方、私は多くのフロントエンドデバイス(PC、タブレット、モバイル)を持っており、GUIアプリケーションもブローカーに接続されています。したがって、ここでMosquittoは、バックエンドデバイスとフロントエンドデバイス間の通信ポイントとして機能し、それらの間でメッセージを転送するだけです。転送されるデータの量が非常に多くなる場合があります(例:1MB /分)。

1つのバックエンドデバイス+多くのフロントエンドデバイスが1つのインストールです。同時に機能する何千ものそのようなインストールのためのインフラストラクチャを準備する必要があります。ですから、私のサービスは非常に魅力的である必要があります。私の会社はAzureクラウドソリューションを使用しているので、このソリューションの学習を開始しました。少し混乱していることを認めなければなりません。 IoT Hubを使用する必要があることを読みましたが、MQTTデバイスと通信するにはMQTTGatewayが必要です。一方、よく理解していれば、ゲートウェイはいくつかのVMで実行されている必要があるため、ここではソリューションのスケーラビリティが失われます。私は正しいですか? 100kまたは500kデバイスをサポートする必要がある場合は、別のVMが必要ですか?もう1つは、これらすべてをWebサービス(バックエンドおよびフロントエンドデバイスの管理用)と統合する必要があるため、WebサービスとMQTTブローカー間の接続が必要です...

Azureを使い始める前は、MQTTブローカーサービスを開始するだけで、魔法のように非常に呼び出しやすく、何千ものデバイスにサービスを提供できるようになると想像していました。

誰かがそれを噛む方法を私に説明できますか?

8
kappa

現在、AzureではMQTTプロトコルが公式にサポートされていませんが、AMQPとHTTPをサポートするIoTHubのパブリックプレビューのみがサポートされています。 MQTTデバイスをIoTHubに接続するために、Microsoftは、プロトコル変換を実行するIoT Protocol Gateway( https://github.com/Azure/azure-iot-protocol-gateway )という名前の「フレームワーク」を提供しています。 MQTTとAMQPの間。 IoTプロトコルゲートウェイは、オンプレミスまたはクラウドにAzureワーカーロールとしてインストールできます。 2番目のシナリオでは、Azureによって提供され、ワー​​カーロールインスタンスに関連するスケーラビリティがあります。このソリューションは、IoT Hub(まだ公開プレビュー中)とIoT Protocol Gateway自体の寿命が短いため、まったく新しいものです。

最初のソリューションは、VMにインストールする必要があるサードパーティのMQTTブローカー(mosquittoなど)の使用に基づいています。 AFAIK mosquittoは、HiveMQブローカーのようなクラスタリングをサポートしていません(ここで別の回答を参照してください: Mosquittoブローカーでクラスターを形成する )。

WebサービスとMQTTブローカー間の接続に関する最後のこと。この場合、Webサービスは、Webサービス自体に含める必要のあるMQTTクライアントを使用して、(フロントエンドからの)彼への呼び出しをMQTTブローカーで公開されたメッセージに変換する必要があります。

AWSを使用している場合でも、次のリンクも役立つ可能性があります: https://groups.google.com/forum/#!topic/mqtt/19jqofoPLro

パオロ。

3
ppatierno

Azure IoTHubがMQTTとネイティブに通信するようになりました。プロトコルゲートウェイは不要になりました。 https://Azure.Microsoft.com/en-us/documentation/articles/iot-hub-mqtt-support/

これは、MQTTユーザー名とパスワードの作成に最後の1時間を費やしたばかりの場合に、非常に役立ちます。 https://github.com/Azure/azure-content/blob/master/articles/ iot-hub/iot-hub-devguide.md#example

例:

ユーザー名(DeviceIdでは大文字と小文字が区別されます):iothubname.Azure-devices.net/DeviceId

パスワード(Generate SAS with Device Explorer):SharedAccessSignature sr=iothubname.Azure-devices.net%2fdevices%2fDeviceId&sig=kPszxZZZZZZZZZZZZZZZZZAhLT%2bV7o%3d&se=1487709501

WindowsでPahoおよびMQTT.fxでテストされています。 mosquittoで認証することができませんでした。また、mosquittoの場合に備えて、stunnelを使用してみても、かなりの努力をしました。 TLSサポートはそれを削減していませんでした。 Mosquittoは、長いパスワードを正しく処理していないか、それらに沿ったものを処理していない可能性があります。認証エラーをスローします。エスケープ%および&助けにはならなかった。

誰かがMosquittoをAzureIoT Hubで動作させる場合は、目を開けてください。

12
evilSnobu