Připojení cloudového konektoru mostu MQTT Azure IoT MQT Preview do jiných zprostředkovatelů MQTT
Důležité
Azure IoT Operations Preview – Služba Azure Arc je aktuálně ve verzi PREVIEW. Tento software ve verzi Preview byste neměli používat v produkčních prostředích.
Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.
K připojení ke službě Azure Event Grid nebo jiným zprostředkovatelům MQTT můžete použít most Azure IoT MQT Preview MQTT. Přemostění MQTT je proces propojení dvou zprostředkovatelů MQTT, aby mohly vyměňovat zprávy.
- Při přemostění dvou zprostředkovatelů se zprávy publikované na jednom zprostředkovateli automaticky přeposílají druhé a naopak.
- Přemostění MQTT pomáhá vytvořit síť zprostředkovatelů MQTT, které vzájemně komunikují, a podle potřeby rozšířit infrastrukturu MQTT přidáním dalších zprostředkovatelů.
- Přemostění MQTT je užitečné pro více fyzických umístění, sdílení zpráv MQTT a témat mezi hraničními zařízeními a cloudem nebo v případě, že chcete integrovat MQTT s jinými systémy zasílání zpráv.
Aby bylo možné přemístit na jiného zprostředkovatele, musí Azure IoT MQQ znát adresu URL koncového bodu vzdáleného zprostředkovatele, jakou verzi MQTT, jak ověřit a jaká témata se mají mapovat. Pro maximalizaci kompozability a flexibility nativním pro Kubernetes se tyto hodnoty konfigurují jako vlastní prostředky Kubernetes (CRD), které se nazývají MqttBridge Připojení or a MqttBridgeTopicMap. Tato příručka vás provede postupem vytvoření konektoru mostu MQTT pomocí těchto prostředků.
Vytvořte soubor YAML, který definuje prostředek MqttBridge Připojení or. Můžete použít příklad YAML, ale nezapomeňte změnit
namespace
nastavení tak, aby odpovídalo tomu, který má nasazený Azure IoT MQ, aremoteBrokerConnection.endpoint
aby odpovídalo adrese URL koncového bodu vzdáleného zprostředkovatele.Vytvořte soubor YAML, který definuje prostředek MqttBridgeTopicMap . Můžete použít příklad YAML, ale nezapomeňte změnit
namespace
tak, aby odpovídala prostředku Azure IoT MQ nasazeného amqttBridgeConnectorRef
aby odpovídal názvu prostředku MqttBridge Připojení oru, který jste vytvořili v předchozím kroku.Nasaďte konektor mostu MQTT a mapu témat pomocí
kubectl apply -f <filename>
nástroje .$ kubectl apply -f my-mqtt-bridge.yaml mqttbridgeconnectors.mq.iotoperations.azure.com my-mqtt-bridge created $ kubectl apply -f my-topic-map.yaml mqttbridgetopicmaps.mq.iotoperations.azure.com my-topic-map created
Po nasazení použijte kubectl get pods
k ověření, že zprávy začnou proudit do a z vašeho koncového bodu.
Konfigurace MqttBridge Připojení or
Prostředek MqttBridge Připojení or definuje konektor mostu MQTT, který může komunikovat se vzdáleným zprostředkovatelem. Zahrnuje následující součásti:
- Jedna nebo více instancí konektoru mostu MQTT Každá instance je kontejner, na kterém běží konektor mostu MQTT.
- Připojení vzdáleného zprostředkovatele.
- Volitelné připojení místního zprostředkovatele.
Následující příklad ukazuje příklad konfigurace přemostění na zprostředkovatele Azure Event Grid MQTT. Používá spravovanou identitu přiřazenou systémem k ověřování a šifrování TLS.
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeConnector
metadata:
name: my-mqtt-bridge
namespace: azure-iot-operations
spec:
image:
repository: mcr.microsoft.com/azureiotoperations/mqttbridge
tag: 0.4.0-preview
pullPolicy: IfNotPresent
protocol: v5
bridgeInstances: 1
clientIdPrefix: factory-gateway-
logLevel: debug
remoteBrokerConnection:
endpoint: example.westeurope-1.ts.eventgrid.azure.net:8883
tls:
tlsEnabled: true
authentication:
systemAssignedManagedIdentity:
audience: https://eventgrid.azure.net
localBrokerConnection:
endpoint: aio-mq-dmqtt-frontend:8883
tls:
tlsEnabled: true
trustedCaCertificateConfigMap: aio-ca-trust-bundle-test-only
authentication:
kubernetes: {}
Následující tabulka popisuje pole v prostředku MqttBridge Připojení or:
Pole | Požadováno | Popis |
---|---|---|
image | Ano | Obrázek konektoru Kafka Můžete zadat , pullPolicy repository a tag image. Správné hodnoty jsou uvedeny v předchozím příkladu. |
Protokol | Ano | Verze protokolu MQTT. Může být v5 nebo v3 . Viz podpora MQTT v3.1.1. |
bridgeInstances | No | Počet instancí pro spojnici mostu Výchozí hodnota je 1. Viz Počet instancí. |
clientIdPrefix | No | Předpona dynamicky generovaného ID klienta. Výchozí hodnota není předpona. Viz konfigurace ID klienta. |
Loglevel | No | Úroveň protokolu. Může být debug nebo info . Výchozí hodnota je info . |
remoteBroker Připojení ion | Ano | Připojení podrobností o vzdáleném zprostředkovateli, na který se má přemostit. Viz Připojení vzdáleného zprostředkovatele. |
localBroker Připojení ion | No | Připojení podrobností místního zprostředkovatele, na který se má přemostit. Výchozí hodnota je zobrazená. Viz Připojení místního zprostředkovatele. |
Podpora MQTT v3.1.1
Konektor mostu je možné nakonfigurovat tak, aby používal MQTT v3.1.1 s místním připojením zprostředkovatele pro připojení Azure IoT MQ i vzdáleného zprostředkovatele. Pokud ho ale vzdálený zprostředkovatel nepodporuje, přeruší se tím sdílená předplatná. Pokud plánujete používat sdílená předplatná, ponechte ji jako výchozí v5.
Počet instancí
Pro zajištění vysoké dostupnosti a škálování nakonfigurujte konektor mostu MQTT tak, aby používal více instancí. Tok zpráv a trasy jsou mezi různými instancemi automaticky vyváženy.
spec:
bridgeInstances: 2
Konfigurace ID klienta
Azure IoT MQ vygeneruje ID klienta pro každého klienta MqttBridge Připojení or pomocí předpony, kterou zadáte, ve formátu {clientIdPrefix}-{routeName}
. Toto ID klienta je důležité pro Azure IoT MQ, aby se zmírnit ztráta zpráv a zabránilo konfliktům nebo kolizím se stávajícími ID klientů, protože specifikace MQTT umožňuje pouze jedno připojení na ID klienta.
Pokud jsou například clientIdPrefix: "client-"
v mapě tématu dva routes
id klienta: client-route1 a client-route2.
Vzdálené připojení zprostředkovatele
Pole remoteBrokerConnection
definuje podrobnosti připojení pro přemístění na vzdáleného zprostředkovatele. Obsahuje následující pole:
Pole | Požadováno | Popis |
---|---|---|
endpoint | Ano | Adresa URL koncového bodu vzdáleného zprostředkovatele s portem Například example.westeurope-1.ts.eventgrid.azure.net:8883 . |
Tls | Ano | Určuje, jestli je připojení šifrované pomocí protokolu TLS a certifikátu důvěryhodné certifikační autority. Viz podpora protokolu TLS |
ověřování | Ano | Podrobnosti o ověřování pro Azure IoT MQ, které se mají použít se zprostředkovatelem. Musí to být jedna z následujících hodnot: spravovaná identita přiřazená systémem nebo X.509. Viz Ověřování. |
Protokol | No | Řetězcová hodnota definující použití MQTT nebo MQTT přes WebSockets. Může být mqtt nebo webSocket . Výchozí hodnota je mqtt . |
Ověřování
Ověřovací pole definuje metodu ověřování pro Azure IoT MQ, která se má použít se vzdáleným zprostředkovatelem. Obsahuje následující pole:
Pole | Požadováno | Popis |
---|---|---|
systemAssignedManagedIdentity | No | Ověřte se pomocí spravované identity přiřazené systémem. Viz Spravovaná identita. |
x509 | No | Podrobnosti o ověřování pomocí certifikátů X.509 Viz X.509. |
Spravovaná identita
Pole systemAssignedManagedIdentity obsahuje následující pole:
Pole | Požadováno | Popis |
---|---|---|
Publikum | Ano | Cílová skupina tokenu. Vyžaduje se, pokud používáte spravovanou identitu. Pro Event Grid je https://eventgrid.azure.net to . |
Pokud se Azure IoT MQ nasadí jako rozšíření Azure Arc, ve výchozím nastavení získá spravovanou identitu přiřazení systému. Spravovanou identitu pro Azure IoT MQ byste měli použít k interakci s prostředky Azure, včetně zprostředkovatele Event Grid MQTT, protože umožňuje vyhnout se správě přihlašovacích údajů a zachovat vysokou dostupnost.
Pokud chcete použít spravovanou identitu pro ověřování s prostředky Azure, nejprve přiřaďte odpovídající roli Azure RBAC, jako je EventGrid TopicSpaces Publisher , ke spravované identitě Azure IoT MQ poskytované službou Arc.
Pak jako metodu ověřování zadejte a MQTTBridge Připojení or se spravovanou identitou:
spec:
remoteBrokerConnection:
authentication:
systemAssignedManagedIdentity:
audience: https://eventgrid.azure.net
Když používáte spravovanou identitu, ID klienta není konfigurovatelné a odpovídá ID prostředku Azure IoT MQ Azure Arc v rámci Azure Resource Manageru.
Spravovanou identitu přiřazenou systémem poskytuje Azure Arc. Certifikát přidružený ke spravované identitě se musí obnovit alespoň každých 90 dnů, aby se zabránilo ručnímu procesu obnovení. Další informace najdete v tématu Návody vypršení platnosti prostředků Kubernetes s podporou Služby Azure Arc?
X.509
Pole x509
obsahuje následující pole:
Pole | Požadováno | Popis |
---|---|---|
secretName | Ano | Tajný klíč Kubernetes obsahující klientský certifikát a privátní klíč. Službu Azure Key Vault můžete použít ke správě tajných kódů pro Azure IoT MQ místo tajných kódů Kubernetes. Další informace najdete v tématu Správa tajných kódů pomocí služby Azure Key Vault nebo tajných kódů Kubernetes. |
Mnoho zprostředkovatelů MQTT, jako je Event Grid, podporuje ověřování X.509. Most MQT MQ MQ pro Azure IoTT může předložit klientský certifikát X.509 a vyjednat komunikaci TLS. Tajný klíč Kubernetes slouží k uložení klientského certifikátu X.509, privátního klíče a zprostředkující certifikační autority.
kubectl create secret generic bridge-client-secret \
--from-file=client_cert.pem=mqttbridge.pem \
--from-file=client_key.pem=mqttbridge.key \
--from-file=client_intermediate_certs.pem=intermediate.pem
A odkazovat na secretName
:
spec:
remoteBrokerConnection:
authentication:
x509:
secretName: bridge-client-cert
Připojení místního zprostředkovatele
Pole localBrokerConnection
definuje podrobnosti připojení pro přemístění na místního zprostředkovatele.
Pole | Požadováno | Popis |
---|---|---|
endpoint | Ano | Adresa URL koncového bodu vzdáleného zprostředkovatele s portem |
Tls | Ano | Určuje, jestli je připojení šifrované pomocí protokolu TLS a certifikátu důvěryhodné certifikační autority. Viz podpora protokolu TLS |
ověřování | Ano | Podrobnosti o ověřování pro Azure IoT MQ, které se mají použít se zprostředkovatelem. Jedinou podporovanou metodou je token účtu služby Kubernetes (SAT). Chcete-li použít sat, zadejte kubernetes: {} . |
Ve výchozím nastavení se IoT MQ nasadí v oboru názvů azure-iot-operations
s povoleným protokolem TLS a ověřováním SAT.
Nastavení připojení místního zprostředkovatele MqttBridge Připojení or musí být nakonfigurováno tak, aby odpovídalo. YAML nasazení pro MqttBridge Připojení or musí mít localBrokerConnection
stejnou úroveň jako remoteBrokerConnection
. Pokud například chcete použít protokol TLS s ověřováním SAT, aby se shodovaly s výchozím nasazením IoT MQ:
spec:
localBrokerConnection:
endpoint: aio-mq-dmqtt-frontend:8883
tls:
tlsEnabled: true
trustedCaCertificateConfigMap: aio-ca-trust-bundle-test-only
authentication:
kubernetes: {}
trustedCaCertifcateName
Tady je ConfigMap pro kořenovou certifikační autoritu Azure IoT MQ, jako je ConfigMap pro kořenovou ca vzdáleného zprostředkovatele. Výchozí kořenová certifikační autorita je uložena v objektu ConfigMap s názvem aio-ca-trust-bundle-test-only
.
Další informace o získání kořenové certifikační autority najdete v tématu Konfigurace protokolu TLS s automatickou správou certifikátů pro zabezpečení komunikace MQTT.
Podpora TLS
Pole tls
definuje konfiguraci protokolu TLS pro vzdálené nebo místní připojení zprostředkovatele. Obsahuje následující pole:
Pole | Požadováno | Popis |
---|---|---|
tlsEnabled | Ano | Bez ohledu na to, jestli je protokol TLS povolený nebo ne. |
trustedCaCertificateConfigMap | No | Certifikát certifikační autority, který se má při připojování ke zprostředkovateli důvěřovat. Vyžaduje se, pokud je povolený protokol TLS. |
Podpora šifrování TLS je dostupná pro připojení vzdáleného i místního zprostředkovatele.
- Pro připojení ke vzdálenému zprostředkovateli: Pokud je povolený protokol TLS, měl by být jako odkaz na objekt ConfigMap Kubernetes zadán důvěryhodný certifikát certifikační autority. Pokud ne, metoda handshake protokolu TLS pravděpodobně selže, pokud vzdálený koncový bod není široce důvěryhodný certifikát důvěryhodné certifikační autority již v úložišti certifikátů operačního systému. Event Grid například používá široce důvěryhodný kořen certifikační autority, takže není nutné zadávat.
- Pro místní zprostředkovací připojení (Azure IoT MQ): Pokud je pro naslouchací proces zprostředkovatele Azure IoT MQ povolený protokol TLS, musí být certifikát certifikační autority, který vystavil certifikát serveru naslouchacího procesu, zadán jako odkaz Kubernetes ConfigMap .
Pokud zadáte důvěryhodnou certifikační autoritu, vytvořte objekt ConfigMap obsahující veřejnou adresu CA a zadejte název objektu trustedCaCertificateConfigMap
configmap ve vlastnosti. Příklad:
kubectl create configmap client-ca-configmap --from-file ~/.step/certs/root_ca.crt
Konfigurace MqttBridgeTopicMap
Prostředek MqttBridgeTopicMap definuje mapování témat mezi místními a vzdálenými zprostředkovateli. Musí se používat společně s prostředkem MqttBridge Připojení or. Zahrnuje následující součásti:
- Název prostředku MqttBridge Připojení or pro propojení.
- Seznam tras přemostění.
- Volitelná konfigurace sdíleného předplatného.
MqttBridge Připojení or může používat více MqttBridgeTopic Mapy propojených s ním. Když se nasadí prostředek MqttBridge Připojení or, operátor Azure IoT MQ začne prohledát obor názvů pro všechny MqttBridgeTopic Mapy propojené s ním a automaticky spravovat tok zpráv mezi instancemi MqttBridge Připojení or. Po nasazení je objekt MqttBridgeTopicMap propojený s MqttBridge Připojení orem. Každý MqttBridgeTopicMap lze propojit pouze s jedním MqttBridge Připojení orem.
Následující příklad ukazuje konfiguraci MqttBridgeTopicMap pro přemostění zpráv ze vzdáleného tématu remote-topic
do místního tématu local-topic
:
apiVersion: mq.iotoperations.azure.com/v1beta1
kind: MqttBridgeTopicMap
metadata:
name: my-topic-map
namespace: azure-iot-operations
spec:
mqttBridgeConnectorRef: my-mqtt-bridge
routes:
- direction: remote-to-local
name: first-route
qos: 0
source: remote-topic
target: local-topic
sharedSubscription:
groupMinimumShareNumber: 3
groupName: group1
- direction: local-to-remote
name: second-route
qos: 1
source: local-topic
target: remote-topic
Následující tabulka popisuje pole v prostředku MqttBridgeTopicMap:
Pole | Požadováno | Popis |
---|---|---|
mqttBridge Připojení orRef | Ano | Název prostředku, na který MqttBridgeConnector chcete vytvořit propojení. |
routes | Ano | Seznam tras přemostění. Další informace naleznete v tématu Trasy. |
Trasy
MqttBridgeTopicMap může mít více tras. Pole routes
definuje seznam tras. Obsahuje následující pole:
Pole | Požadováno | Popis |
---|---|---|
směr | Ano | Směr toku zpráv Může to být remote-to-local nebo local-to-remote . Další informace naleznete v tématu Směr. |
name | Ano | Název trasy. |
Qos | No | Kvalita služby MQTT (QoS). Výchozí hodnota je 1. |
zdroj | Ano | Zdrojové téma MQTT. Můžou mít zástupné kóty jako # a + . Zobrazení zástupných znaků ve zdrojovém tématu |
target | No | Cílové téma MQTT. Nemůžu mít zástupné cardy. Pokud není zadaný, bude stejný jako zdroj. Viz Referenční zdrojové téma v cíli. |
sharedSubscription | No | Konfigurace sdíleného předplatného Aktivuje nakonfigurovaný počet klientů pro další škálování. Další informace najdete v tématu Sdílená předplatná. |
Směr
Pokud je například směr local-to-remote, Azure IoT MQ publikuje všechny zprávy v zadaném místním tématu do vzdáleného tématu:
routes:
- direction: local-to-remote
name: "send-alerts"
source: "alerts"
target: "factory/alerts"
Pokud je směr obrácený, Azure IoT MQ přijímá zprávy ze vzdáleného zprostředkovatele. Tady je cíl vynechán a všechny zprávy z commands/factory
tématu na vzdáleném zprostředkovateli se publikuje na stejném tématu místně.
routes:
- direction: remote-to-local
name: "receive-commands"
source: "commands/factory"
Zástupné cardy ve zdrojovém tématu
Pokud chcete překlenout z nestatických témat, použijte zástupné cardy, abyste definovali, jak se mají vzory témat shodovat, a pravidlo překladu názvů témat. Pokud chcete například přemístit všechny zprávy ve všech dílčích dílčích podtemech, použijte zástupný znak s více úrovněmitelemetry
#
:
routes:
- direction: local-to-remote
name: "wildcard-source"
source: "telemetry/#"
target: "factory/telemetry"
V příkladu, pokud je zpráva publikována do libovolného tématu v části telemetry
, jako je telemetry/furnace/temperature
například , Azure IoT MQ ji publikuje do vzdáleného přemístit zprostředkovatele pod statickým factory/telemetry
tématem.
Pro zástupný znak tématu na jedné úrovni použijte +
místo toho, například telemetry/+/temperature
.
Konektor mostu MQTT musí znát přesné téma v cílovém zprostředkovateli, a to buď vzdáleně, nebo Azure IoT MQ bez jakékoli nejednoznačnosti. Zástupné cardy jsou k dispozici pouze v rámci source
tématu.
Referenční zdrojové téma v cíli
Pokud chcete odkazovat na celé zdrojové téma, úplně v trase vynecháte konfiguraci cílového tématu. Podporují se zástupné kóty.
Například jakákoli zpráva publikovaná v tématu my-topic/#
( my-topic/foo
například nebo my-topic/bar
) se přemístit na vzdáleného zprostředkovatele ve stejném tématu:
routes:
- direction: local-to-remote
name: "target-same-as-source"
source: "my-topic/#"
# No target
Jiné metody odkazu na zdrojové téma nejsou podporovány.
Sdílená předplatná
Pole sharedSubscription
definuje konfiguraci sdíleného předplatného pro trasu. Obsahuje následující pole:
Pole | Požadováno | Popis |
---|---|---|
groupMinimumShareNumber | Ano | Početklientůch |
Groupname | Ano | Název sdílené skupiny předplatného |
Sdílená předplatná pomáhají Azure IoT MQ vytvářet další klienty pro most MQTT. Pro každou trasu můžete nastavit jiné sdílené předplatné. Azure IoT MQ se přihlásí k odběru zpráv ze zdrojového tématu a odesílá je do jednoho klienta najednou pomocí kruhového dotazování. Potom klient publikuje zprávy do zprostředkovatele přemístit.
Pokud například nastavíte trasu se sdíleným předplatným a nastavíte ji groupMinimumShareNumber
jako 3:
routes:
- direction: local-to-remote
qos: 1
source: "shared-sub-topic"
target: "remote/topic"
sharedSubscription:
groupMinimumShareNumber: 3
groupName: "sub-group"
Most MQT MQ pro Azure IoT MQT vytváří tři klienty předplatitelů bez ohledu na počet instancí. Každý z nich $share/sub-group/shared-sub-topic
získá pouze jeden klient . Pak stejný klient publikuje zprávu do přemíscené vzdáleného zprostředkovatele v tématu remote/topic
. Další zpráva přejde na dalšího klienta.
To vám pomůže vyvážit provoz zpráv pro most mezi více klienty s různými ID. To je užitečné v případě, že přemíscený zprostředkovatel omezuje počet zpráv, které může každý klient odeslat.
Podpora zprostředkovatele Azure Event Grid MQTT
Pokud chcete minimalizovat správu přihlašovacích údajů, doporučuje se použití spravované identity přiřazené systémem a Azure RBAC přemístit Azure IoT MQ pomocí funkce zprostředkovatele MQT Azure Event Gridu.
Kompletní kurz najdete v tématu Kurz: Konfigurace mostu MQTT mezi Azure IoT MQ Preview a Azure Event Gridem.
Připojení do zprostředkovatele Event Grid MQTT se spravovanou identitou
Nejprve pomocí az k8s-extension show
a vyhledejte ID objektu zabezpečení pro rozšíření Azure IoT MQ Arc. Poznamenejte si výstupní hodnotu , identity.principalId
která by měla vypadat jako abcd1234-5678-90ab-cdef-1234567890ab
.
az k8s-extension show --resource-group <RESOURCE_GROUP> --cluster-name <CLUSTER_NAME> --name mq --cluster-type connectedClusters --query identity.principalId -o tsv
Pak pomocí Azure CLI přiřaďte role spravované identitě rozšíření Azure IoT MQ Arc. Nahraďte <MQ_ID>
ID objektu zabezpečení, které jste našli v předchozím kroku. Pokud chcete například přiřadit roli EventGrid TopicSpaces Publisheru:
az role assignment create --assignee <MQ_ID> --role 'EventGrid TopicSpaces Publisher' --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.EventGrid/namespaces/<EVENT_GRID_NAMESPACE>
Tip
Pokud chcete optimalizovat princip nejnižších oprávnění, můžete roli přiřadit k prostoru tématu místo celého oboru názvů Event Gridu. Další informace najdete v tématech Řízení přístupu na základě role a řízení přístupu na základě role v Event Gridu.
Nakonec vytvořte MQTTBridge Připojení or a jako metodu ověřování zvolte spravovanou identitu. Vytvořte MqttBridgeTopic Mapy a nasaďte most MQTT pomocí kubectl
.
Maximální počet relací klienta na název ověřování
Pokud bridgeInstances
je nastavená hodnota vyšší než 1
, nakonfigurujte maximální počet klientských relací zprostředkovatele >Event Grid MQTT na název ověřování tak, aby odpovídal počtu instancí. Tato konfigurace zabraňuje problémům, jako je chyba 151, překročení kvóty.
Limit počtu připojení
Pokud použití spravované identity není možné, mějte při návrhu nastavení na paměti limity pro zprostředkovatele Event Grid MQTT pro jednotlivé připojení. V době publikování je limit pro připojení 100 zpráv za sekundu. Pokud chcete zvýšit propustnost mostu MQTT, zvyšte počet klientů obsluhujících jednotlivé trasy pomocí sdílených předplatných.
Přemístání z jiného zprostředkovatele do Azure IoT MQ Preview
Azure IoT MQ je kompatibilní zprostředkovatel MQTT a další zprostředkovatelé na něj můžou přemíst příslušné přihlašovací údaje pro ověřování a autorizaci. Viz například dokumentace k mostu MQTT pro HiveMQ, VerneMQ, EMQX a Mosquitto.