Ondersteuning voor IoT Hub MQTT 5 (afgeschaft)
Versie: 2.0 api-versie: 2020-10-01-preview
In dit document wordt de IoT Hub-gegevensvlak-API gedefinieerd via het MQTT-protocol van versie 5.0. Zie API-naslaginformatie voor volledige definities in deze API.
Notitie
MQTT 5-ondersteuning in IoT Hub is afgeschaft en IoT Hub heeft beperkte functieondersteuning voor MQTT. Als voor uw oplossing MQTT v3.1.1- of v5-ondersteuning nodig is, wordt MQTT-ondersteuning aanbevolen in Azure Event Grid. Zie MQTT-ondersteuning vergelijken in IoT Hub en Event Grid voor meer informatie.
Vereisten
- Maak een gloednieuwe IoT-hub waarvoor de preview-modus is ingeschakeld. MQTT 5 is alleen beschikbaar in de preview-modus en u kunt geen bestaande IoT-hub overschakelen naar de preview-modus. Zie De preview-modus inschakelen voor meer informatie
- Voorafgaande kennis van MQTT 5-specificatie.
Niveau van ondersteuning en beperkingen
IoT Hub-ondersteuning voor MQTT 5 is in preview en beperkt op de volgende manieren (communiceren met de client via CONNACK
eigenschappen, tenzij expliciet anders vermeld):
- Er worden nog geen officiële Sdk's voor Azure IoT-apparaten ondersteund.
- Abonnements-id's worden niet ondersteund.
- Gedeelde abonnementen worden niet ondersteund.
RETAIN
wordt niet ondersteund.Maximum QoS
is1
.Maximum Packet Size
is256 KiB
(onderhevig aan verdere beperkingen per bewerking).- Toegewezen client-id's worden niet ondersteund.
Keep Alive
is beperkt tot19 min
(maximale vertraging voor liveness check –28.5 min
).Topic Alias Maximum
is10
.Response Information
wordt niet ondersteund;CONNACK
retourneert geenResponse Information
eigenschap, zelfs niet alsCONNECT
deze eigenschap bevatRequest Response Information
.Receive Maximum
(maximum aantal toegestane niet-bekendePUBLISH
pakketten (in client-serverrichting) metQoS: 1
) is16
.- Eén client mag niet meer dan
50
abonnementen hebben. Als een client de abonnementslimiet0x97
bereikt,SUBACK
wordt de redencode voor abonnementen geretourneerd (quotum overschreden).
Verbindingslevenscyclus
Connection
Als u een client wilt verbinden met IoT Hub met behulp van deze API, maakt u een verbinding per MQTT 5-specificatie.
De client moet het pakket binnen 30 seconden verzenden CONNECT
na geslaagde TLS-handshake of de server sluit de verbinding.
Hier volgt een voorbeeld van CONNECT
een pakket:
-> CONNECT
Protocol_Version: 5
Clean_Start: 0
Client_Id: D1
Authentication_Method: SAS
Authentication_Data: {SAS bytes}
api-version: 2020-10-10
host: abc.azure-devices.net
sas-at: 1600987795320
sas-expiry: 1600987195320
client-agent: artisan;Linux
Authentication Method
eigenschap is vereist en identificeert welke verificatiemethode wordt gebruikt. Zie Verificatie voor meer informatie over de verificatiemethode.Authentication Data
verwerking van eigenschappen is afhankelijkAuthentication Method
van . AlsAuthentication Method
dit is ingesteldSAS
op,Authentication Data
is dit vereist en moet deze een geldige handtekening bevatten. Zie Verificatie voor meer informatie over verificatiegegevens.api-version
eigenschap is vereist en moet worden ingesteld op API-versiewaarde die is opgegeven in de header van deze specificatie om deze specificatie toe te passen.host
de eigenschap definieert de hostnaam van de tenant. Dit is vereist tenzij de SNI-extensie is gepresenteerd in client hello-record tijdens tls-handshakesas-at
definieert de tijd van de verbinding.sas-expiry
definieert de verlooptijd voor de opgegeven SAS.client-agent
optioneel communiceert informatie over de client die de verbinding maakt.
Notitie
Authentication Method
en andere eigenschappen in de specificatie met hoofdletters zijn eersteklas eigenschappen in MQTT 5- ze worden beschreven in details in MQTT 5-specificatie. api-version
en andere eigenschappen in dash case zijn gebruikerseigenschappen die specifiek zijn voor ioT Hub-API.
IoT Hub reageert met CONNACK
pakket zodra het is voltooid met verificatie en het ophalen van gegevens ter ondersteuning van de verbinding. Als de verbinding tot stand is gebracht, CONNACK
ziet er als volgt uit:
<- CONNACK
Session_Present: 1
Reason_Code: 0x00
Session_Expiry_Interval: 0xFFFFFFFF # included only if CONNECT specified value less than 0xFFFFFFFF and more than 0x00
Receive_Maximum: 16
Maximum_QoS: 1
Retain_Available: 0
Maximum_Packet_Size: 262144
Topic_Alias_Maximum: 10
Subscription_Identifiers_Available: 0
Shared_Subscriptions_Available: 0
Server_Keep_Alive: 1140 # included only if client did not specify Keep Alive or if it specified a bigger value
Deze CONNACK
pakketeigenschappen volgen de MQTT 5-specificatie. Ze weerspiegelen de mogelijkheden van IoT Hub.
Verificatie
De Authentication Method
eigenschap op CONNECT
de client definieert welk type verificatie wordt gebruikt voor deze verbinding:
SAS
- Shared Access Signature is opgegeven inCONNECT
deAuthentication Data
eigenschap,X509
- client is afhankelijk van verificatie van clientcertificaten.
Verificatie mislukt als de verificatiemethode niet overeenkomt met de geconfigureerde methode van de client in IoT Hub.
Notitie
Voor deze API moet Authentication Method
de eigenschap in CONNECT
het pakket worden ingesteld. Als Authentication Method
de eigenschap niet is opgegeven, mislukt de verbinding met Bad Request
het antwoord.
Verificatie van gebruikersnaam/wachtwoord die in eerdere API-versies wordt gebruikt, wordt niet ondersteund.
SAS
Met verificatie op basis van SAS moet een client de handtekening van de verbindingscontext opgeven. De handtekening bewijst echtheid van de MQTT-verbinding. De handtekening moet zijn gebaseerd op een van de twee verificatiesleutels in de configuratie van de client in IoT Hub. Of deze moet zijn gebaseerd op een van de twee gedeelde toegangssleutels van een beleid voor gedeelde toegang.
Tekenreeks die moet worden ondertekend, moet als volgt worden gevormd:
{host name}\n
{Client Id}\n
{sas-policy}\n
{sas-at}\n
{sas-expiry}\n
host name
is afgeleid van de SNI-extensie (gepresenteerd door client in Client Hello-record tijdens TLS-handshake) ofhost
gebruikerseigenschap inCONNECT
pakket.Client Id
is client-id inCONNECT
pakket.sas-policy
- indien aanwezig, definieert u ioT Hub-toegangsbeleid dat wordt gebruikt voor verificatie. Het wordt gecodeerd als gebruikerseigenschap opCONNECT
pakket. Optioneel: als u dit weglaat, worden in plaats daarvan verificatie-instellingen in het apparaatregister gebruikt.sas-at
- indien aanwezig, geeft u de tijd van de verbinding - huidige tijd. Het wordt gecodeerd als gebruikerseigenschap van hettime
type opCONNECT
pakket.sas-expiry
definieert de verlooptijd voor de verificatie. Het is eentime
-getypte gebruikerseigenschap opCONNECT
pakket. Deze eigenschap is vereist.
Als u optionele parameters weglaat, moet in plaats daarvan een lege tekenreeks worden gebruikt om te ondertekenen.
HMAC-SHA256 wordt gebruikt om de tekenreeks te hashen op basis van een van de symmetrische sleutels van het apparaat. Hash-waarde wordt vervolgens ingesteld als waarde van Authentication Data
eigenschap.
X509
Als Authentication Method
de eigenschap is ingesteld op X509
, verifieert IoT Hub de verbinding op basis van het opgegeven clientcertificaat.
Verificatie opnieuw
Als verificatie op basis van SAS wordt gebruikt, raden we u aan om kortdurende verificatietokens te gebruiken. Om de verbinding geverifieerd te houden en te voorkomen dat de verbinding wordt verbroken vanwege de vervaldatum, moet de client opnieuw verifiëren door een pakket te verzenden AUTH
met Reason Code: 0x19
(verificatie opnieuw):
-> AUTH
Reason_Code: 0x19
Authentication_Method: SAS
Authentication_Data: {SAS bytes}
sas-at: {current time}
sas-expiry: {SAS expiry time}
Regels:
Authentication Method
moet hetzelfde zijn als degene die wordt gebruikt voor de eerste verificatie- als de verbinding oorspronkelijk is geverifieerd met sas op basis van beleid voor gedeelde toegang, moet de handtekening die wordt gebruikt bij opnieuw verifiëren, zijn gebaseerd op hetzelfde beleid.
Als herauthenticatie slaagt, verzendt AUTH
IoT Hub pakketten met Reason Code: 0x00
(geslaagd). Anders verzendt DISCONNECT
IoT Hub pakketten met Reason Code: 0x87
(niet geautoriseerd) en sluit de verbinding.
Onderbreking
Server kan de client om een paar redenen verbreken, waaronder:
- client heeft zich verkeerd gedragen op een manier waarop niet rechtstreeks kan worden gereageerd met negatieve bevestiging (of reactie),
- server kan de status van de verbinding niet up-to-date houden,
- een andere client maakt verbinding met dezelfde identiteit.
De server kan de verbinding verbreken met een redencode die is gedefinieerd in de MQTT 5.0-specificatie. Belangrijke vermeldingen:
135
(Niet geautoriseerd) wanneer opnieuw verificatie mislukt, verloopt het huidige SAS-token of worden de referenties van het apparaat gewijzigd.142
(Sessie overgenomen) wanneer er een nieuwe verbinding met dezelfde clientidentiteit is geopend.159
(Verbindingssnelheid overschreden) wanneer de verbindingssnelheid voor de IoT-hub de limiet overschrijdt.131
(Implementatiespecifieke fout) wordt gebruikt voor aangepaste fouten die in deze API zijn gedefinieerd.status
enreason
eigenschappen worden gebruikt om meer informatie over de oorzaak van de verbinding te communiceren (zie Antwoord voor meer informatie).
Operations
Alle functionaliteiten in deze API worden uitgedrukt als bewerkingen. Hier volgt een voorbeeld van de bewerking Telemetrie verzenden:
-> PUBLISH
QoS: 1
Packet_Id: 3
Topic: $iothub/telemetry
Payload: Hello
<- PUBACK
Packet_Id: 3
Reason_Code: 0
Zie voor volledige specificatie van bewerkingen in deze API ioT Hub-gegevensvlak MQTT 5 API-verwijzing.
Notitie
Alle voorbeelden in deze specificatie worden vanuit het perspectief van de client weergegeven. Ondertekenen ->
betekent dat client pakket verzendt, <-
- ontvangen.
Berichtonderwerpen en abonnementen
Onderwerpen die in de berichten van bewerkingen in deze API worden gebruikt, beginnen met $iothub/
.
Semantiek van MQTT-broker is niet van toepassing op deze bewerkingen (zie Onderwerpen die beginnen met $) voor meer informatie.
Onderwerpen die beginnen met $iothub/
die niet zijn gedefinieerd in deze API, worden niet ondersteund:
- Berichten verzenden naar niet-gedefinieerde onderwerpresultaten in
Not Found
antwoord (zie Antwoord voor meer informatie) - Abonneren op niet-gedefinieerde onderwerpresultaten
SUBACK
metReason Code: 0x8F
(onderwerpfilter ongeldig).
Onderwerpnamen en eigenschapsnamen zijn hoofdlettergevoelig en moeten exact overeenkomen. Dit wordt bijvoorbeeld $iothub/telemetry/
niet ondersteund.$iothub/telemetry
Notitie
Jokertekens in abonnementen worden $iothub/..
niet ondersteund. Dat wil gezegd, een client kan zich niet abonneren op $iothub/+
of $iothub/#
. Als u dit probeert, resulteert dit in SUBACK
( Reason Code: 0xA2
Jokertekenabonnementen worden niet ondersteund). Alleen jokertekens met één segment (+
) worden ondersteund in plaats van padparameters in de onderwerpnaam voor bewerkingen die deze bevatten.
Interactietypen
Alle bewerkingen in deze API zijn gebaseerd op een van de twee interactietypen:
- Bericht met optionele bevestiging (MessageAck)
- Request-Response (ReqRep)
Bewerkingen variëren ook per richting (afhankelijk van de richting van het eerste bericht in exchange):
- Client-naar-server (c2s)
- Server-naar-client (s2c)
Verzenden van telemetrie is bijvoorbeeld client-naar-server-bewerking van het type Bericht met bevestiging, terwijl De directe methode verwerken server-naar-client-bewerking van aanvraag-antwoordtype is.
Interacties tussen bevestiging van berichten
Bericht met optionele bevestigingsinteractie (MessageAck) wordt uitgedrukt als een uitwisseling van PUBLISH
en PUBACK
pakketten in MQTT. Bevestiging is optioneel en afzender kan ervoor kiezen om het niet aan te vragen door pakket te verzenden PUBLISH
met QoS: 0
.
Notitie
Als eigenschappen in PUBACK
pakket moeten worden afgekapt vanwege Maximum Packet Size
de opgegeven door de client, behoudt IoT Hub zoveel gebruikerseigenschappen als deze binnen de opgegeven limiet passen. Gebruikerseigenschappen die eerst worden vermeld, hebben een hogere kans om te worden verzonden dan die later worden vermeld; Reason String
eigenschap heeft de minste prioriteit.
Voorbeeld van eenvoudige MessageAck-interactie
Bericht:
PUBLISH
QoS: 1
Packet_Id: 34
Topic: $iothub/{request.path}
Payload: <any>
Bevestiging (geslaagd):
PUBACK
Packet_Id: 34
Reason_Code: 0
Interacties tussen aanvragen en antwoorden
In reqRep-interacties (Request-Response) worden zowel Request als Response omgezet in PUBLISH
pakketten met QoS: 0
.
Correlation Data
de eigenschap moet worden ingesteld in beide en wordt gebruikt om het antwoordpakket aan het aanvraagpakket te koppelen.
Deze API maakt gebruik van één antwoordonderwerp $iothub/responses
voor alle ReqRep-bewerkingen. Abonneren op/afmelden bij dit onderwerp voor client-naar-server-bewerkingen is niet vereist. Op de server wordt ervan uitgegaan dat alle clients zijn geabonneerd.
Voorbeeld van eenvoudige ReqRep-interactie
Aanvraag:
PUBLISH
QoS: 0
Topic: $iothub/{request.path}
Correlation_Data: 0x01 0xFA
Payload: ...
Antwoord (geslaagd):
PUBLISH
QoS: 0
Topic: $iothub/responses
Correlation_Data: 0x01 0xFA
Payload: ...
ReqRep-interacties bieden geen ondersteuning voor PUBLISH
pakketten met QoS: 1
als aanvraag- of antwoordberichten. Het verzenden van aanvraagresultaten PUBLISH
in Bad Request
antwoord.
De maximale lengte die in Correlation Data
de eigenschap wordt ondersteund, is 16 bytes. Als Correlation Data
eigenschap op pakket is ingesteld op PUBLISH
een waarde die langer is dan 16 bytes, verzendt DISCONNECT
IoT Hub met Bad Request
resultaat en sluit de verbinding. Dit gedrag is alleen van toepassing op pakketten die binnen deze API worden uitgewisseld.
Notitie
Correlatiegegevens zijn een willekeurige bytereeks, bijvoorbeeld dat het geen UTF-8-tekenreeks is.
ReqRep gebruikt vooraf gedefinieerde onderwerpen voor antwoord; De eigenschap Antwoordonderwerp in aanvraagpakket PUBLISH
(indien ingesteld door de afzender) wordt genegeerd.
IoT Hub abonneert client automatisch op antwoordonderwerpen voor alle reqRep-bewerkingen van clients naar server. Zelfs als de client zich expliciet afmeldt voor het antwoordonderwerp, wordt het abonnement automatisch hersteld door IoT Hub. Voor reqRep-interacties tussen servers is het nog steeds nodig dat het apparaat zich abonneert.
Berichteigenschappen
Bewerkingseigenschappen - door het systeem of door de gebruiker gedefinieerd - worden uitgedrukt als pakketeigenschappen in MQTT 5.
Namen van gebruikerseigenschappen zijn hoofdlettergevoelig en moeten exact zoals gedefinieerd worden gespeld. Dit wordt bijvoorbeeld Trace-ID
niet ondersteund.trace-id
Aanvragen met gebruikerseigenschappen buiten specificatie en zonder voorvoegsel @
resulteren in een fout.
Systeemeigenschappen worden gecodeerd als eigenschappen van de eerste klasse (bijvoorbeeld Content Type
) of als gebruikerseigenschappen. Specificatie biedt een uitgebreide lijst met ondersteunde systeemeigenschappen.
Alle eigenschappen van de eerste klasse worden genegeerd, tenzij ondersteuning voor deze eigenschappen expliciet wordt vermeld in de specificatie.
Wanneer door de gebruiker gedefinieerde eigenschappen zijn toegestaan, moeten hun namen de notatie @{property name}
volgen. Door de gebruiker gedefinieerde eigenschappen ondersteunen alleen geldige UTF-8-tekenreekswaarden. De eigenschap met waarde moet bijvoorbeeld MyProperty1
worden gecodeerd als de eigenschap Gebruiker met de naam @MyProperty
en waarde15
.15
Als de eigenschap Gebruiker niet wordt herkend in IoT Hub, wordt deze beschouwd als een fout en reageert IoT Hub met PUBACK
Reason Code: 0x83
(implementatiespecifieke fout) en status: 0100
(ongeldige aanvraag). Als bevestiging niet is aangevraagd (QoS: 0), DISCONNECT
wordt het pakket met dezelfde fout teruggestuurd en wordt de verbinding beëindigd.
Deze API definieert naast string
de volgende gegevenstypen:
time
: aantal milliseconden sinds1970-01-01T00:00:00.000Z
. bijvoorbeeld,1600987195320
voor2020-09-24T22:39:55.320Z
,u32
: niet-ondertekend 32-bits geheel getal,u64
: niet-ondertekend 64-bits geheel getal,i32
: ondertekend 32-bits geheel getal.
Respons
Interacties kunnen verschillende resultaten opleveren: Success
, Bad Request
, Not Found
en andere.
Resultaten onderscheiden zich van elkaar door status
de gebruikerseigenschap. Reason Code
in PUBACK
pakketten (voor MessageAck-interacties) komt waar mogelijk overeen status
met betekenis.
Notitie
Als de client in CONNECT-pakket opgeeft Request Problem Information: 0
, worden er geen gebruikerseigenschappen verzonden op PUBACK
pakketten om te voldoen aan de MQTT 5-specificatie, inclusief status
eigenschap. In dit geval kan de client nog steeds vertrouwen Reason Code
om te bepalen of bevestiging positief of negatief is.
Elke interactie heeft een standaardinstelling (of geslaagd). Het heeft Reason Code
van 0
en status
eigenschap van "niet ingesteld". Anders:
- Voor MessageAck-interacties
PUBACK
wordt anders dan 0x0 (Geslaagd) weergegevenReason Code
.status
eigenschap kan aanwezig zijn om het resultaat verder te verduidelijken. - Voor interacties met ReqRep wordt
status
de eigenschap ResponsePUBLISH
ingesteld. - Omdat er geen manier is om rechtstreeks te reageren op interacties van
QoS: 0
MessageAck,DISCONNECT
wordt het pakket verzonden met antwoordgegevens, gevolgd door de verbinding verbreken.
Voorbeelden:
Ongeldige aanvraag (MessageAck):
PUBACK
Reason_Code: 131
status: 0100
reason: Unknown property `test`
Niet geautoriseerd (MessageAck):
PUBACK
Reason_Code: 135
status: 0101
Niet geautoriseerd (ReqRep):
PUBLISH
QoS: 0
Topic: $iothub/responses
Correlation_Data: ...
status: 0101
Indien nodig stelt IoT Hub de volgende gebruikerseigenschappen in:
status
- Uitgebreide code van IoT Hub voor de status van de bewerking. Deze code kan worden gebruikt om resultaten te onderscheiden.trace-id
– tracerings-id voor de bewerking; IoT Hub kan meer diagnostische gegevens bewaren over de bewerking die kan worden gebruikt voor intern onderzoek.reason
- door mensen leesbare berichten die meer informatie geven over waarom de bewerking is geëindigd in een staat die wordt aangegeven doorstatus
eigenschap.
Notitie
Als de client de eigenschap in CONNECT-pakket instelt Maximum Packet Size
op een zeer kleine waarde, kunnen niet alle gebruikerseigenschappen passen en worden ze niet weergegeven in het pakket.
reason
is alleen bedoeld voor personen en mag niet worden gebruikt in clientlogica. Met deze API kunnen berichten op elk moment worden gewijzigd zonder waarschuwing of wijziging van de versie.
Als de client in CONNECT-pakket verzendt RequestProblemInformation: 0
, worden gebruikerseigenschappen niet opgenomen in bevestigingen per MQTT 5-specificatie.
Statuscode
status
de eigenschap heeft de statuscode voor de bewerking. Het is geoptimaliseerd voor machineleesefficiëntie.
Het bestaat uit een geheel getal met twee bytes dat is gecodeerd als hex in tekenreeks, zoals 0501
.
Codestructuur (bitkaart):
7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0
0 0 0 0 0 R T T | C C C C C C C C
Eerste byte wordt gebruikt voor vlaggen:
- bits 0 en 1 geven het type resultaten aan:
00
-succes01
- clientfout10
- serverfout
- bit 2:
1
geeft aan dat de fout opnieuw kan worden geprobeerd - bits 3 tot en met 7 zijn gereserveerd en moeten worden ingesteld op
0
Second byte bevat werkelijke afzonderlijke antwoordcode. Foutcodes met verschillende vlaggen kunnen dezelfde tweede bytewaarde hebben. Er kunnen bijvoorbeeld foutcodes 0101
0201
0301
zijn 0001
die een afzonderlijke betekenis hebben.
Is bijvoorbeeld Too Many Requests
een client, een fout die opnieuw kan worden geprobeerd met een eigen code van 1
. De waarde is 0000 0101 0000 0001
of 0x0501
.
Clients kunnen type bits gebruiken om te bepalen of de bewerking is voltooid. Clients kunnen ook een bit met een nieuwe poging gebruiken om te bepalen of het verstandig is om de bewerking opnieuw uit te voeren.
Aanbevelingen
Sessiebeheer
CONNACK
pakket bevat Session Present
eigenschap om aan te geven of de server eerder gemaakte sessie is hersteld. Gebruik deze eigenschap om erachter te komen of u zich wilt abonneren op onderwerpen of om het abonneren over te slaan sinds het abonnement eerder is uitgevoerd.
Als u wilt Session Present
vertrouwen, moet de client abonnementen bijhouden die zijn gemaakt (dat wil gezegd, verzonden SUBSCRIBE
pakket en ontvangen SUBACK
met een geslaagde redencode) of ervoor zorgen dat de client zich abonneert op alle onderwerpen in één SUBSCRIBE
/SUBACK
uitwisseling. Als de client twee SUBSCRIBE
pakketten verzendt en de server slechts één van deze pakketten verwerkt, communiceert Session Present: 1
de server terwijl CONNACK
slechts een deel van de abonnementen van de client is geaccepteerd.
Om te voorkomen dat een oudere versie van de client zich niet heeft geabonneerd op alle onderwerpen, kunt u zich beter onvoorwaardelijke abonneren wanneer het gedrag van de client verandert (bijvoorbeeld als onderdeel van de firmware-update). Om ervoor te zorgen dat er geen verlopen abonnementen achterblijven (van maximaal toegestaan aantal abonnementen), moet u zich expliciet afmelden voor abonnementen die niet meer in gebruik zijn.
Batching
Er is geen speciale indeling om een batch berichten te verzenden. Om de overhead van resource-intensieve bewerkingen in TLS en netwerken te verminderen, bundelt u pakketten (PUBLISH
, PUBACK
SUBSCRIBE
en dus nee) samen voordat u ze overgeeft aan de onderliggende TLS/TCP-stack. Client kan ook onderwerpalias eenvoudiger maken binnen de 'batch':
- Plaats de volledige onderwerpnaam in het eerste
PUBLISH
pakket voor de verbinding en koppel de onderwerpalias eraan. - Plaats de volgende pakketten voor hetzelfde onderwerp met de eigenschap lege onderwerpnaam en onderwerpalias.
Migratie
Deze sectie bevat de wijzigingen in de API vergeleken met eerdere MQTT-ondersteuning.
- Transportprotocol is MQTT 5. Eerder - MQTT 3.1.1.
- Contextinformatie voor SAS-verificatie is rechtstreeks in
CONNECT
pakket opgenomen in plaats van te worden gecodeerd samen met handtekening. - Verificatiemethode wordt gebruikt om de gebruikte verificatiemethode aan te geven.
- Shared Access Signature wordt in de eigenschap Verificatiegegevens geplaatst. Het veld Wachtwoord is eerder gebruikt.
- Onderwerpen voor bewerkingen zijn verschillend:
- Telemetrie:
$iothub/telemetry
in plaats vandevices/{Client Id}/messages/events
, - Opdrachten:
$iothub/commands
in plaats vandevices/{Client Id}/messages/devicebound
, - Patchdubbel gerapporteerd:
$iothub/twin/patch/reported
in plaats van$iothub/twin/PATCH/properties/reported
, - Meldingsdubbel Desired State Changed:
$iothub/twin/patch/desired
in plaats van$iothub/twin/PATCH/properties/desired
.
- Telemetrie:
- Het antwoordonderwerp van client-serveraanvraag-antwoordbewerkingen is niet vereist.
- Gebruikerseigenschappen worden gebruikt in plaats van coderingseigenschappen in onderwerpnaamsegment.
- eigenschapsnamen worden gespeld in naamconventie 'dash-case' in plaats van afkortingen met speciaal voorvoegsel. Door de gebruiker gedefinieerde eigenschappen vereisen nu voorvoegsel. Is bijvoorbeeld nu
message-id
,$.mid
terwijlmyProperty1
het wordt@myProperty1
. - De eigenschap Correlatiegegevens wordt gebruikt om aanvraag- en antwoordberichten te correleren voor aanvraag-antwoordbewerkingen in plaats van
$rid
eigenschap gecodeerd in onderwerp. iothub-connection-auth-method
eigenschap wordt niet meer gestempeld voor telemetriegebeurtenissen.- C2D-opdrachten worden niet verwijderd als er geen abonnement van het apparaat is. Ze blijven in de wachtrij totdat het apparaat zich abonneert of verloopt.
Voorbeelden
Telemetrie verzenden
Bericht:
-> PUBLISH
QoS: 1
Packet_Id: 31
Topic: $iothub/telemetry
@myProperty1: My String Value # optional
creation-time: 1600987195320 # optional
@ No_Rules-ForUser-PROPERTIES: Any UTF-8 string value # optional
Payload: <data>
Erkenning:
<- PUBACK
Packet_Id: 31
Reason_Code: 0
Alternatieve bevestiging (beperkt):
<- PUBACK
Packet_Id: 31
Reason_Code: 151
status: 0501
De status van de dubbel verzenden
Aanvraag:
-> PUBLISH
QoS: 0
Topic: $iothub/twin/get
Correlation_Data: 0x01 0xFA
Payload: <empty>
Antwoord (geslaagd):
<- PUBLISH
QoS: 0
Topic: $iothub/responses
Correlation_Data: 0x01 0xFA
Payload: <twin/desired state>
Antwoord (niet toegestaan):
<- PUBLISH
QoS: 0
Topic: $iothub/responses
Correlation_Data: 0x01 0xFA
status: 0102
reason: Operation not allowed for `B2` SKU
Payload: <empty>
Directe methode-aanroep verwerken
Aanvraag:
<- PUBLISH
QoS: 0
Topic: $iothub/methods/abc
Correlation_Data: 0x0A 0x10
Payload: <data>
Antwoord (geslaagd):
-> PUBLISH
QoS: 0
Topic: $iothub/responses
Correlation_Data: 0x0A 0x10
response-code: 200 # user defined response code
Payload: <data>
Notitie
status
is niet ingesteld. Het is een geslaagd antwoord.
Antwoord van apparaat niet beschikbaar:
-> PUBLISH
QoS: 0
Topic: $iothub/responses
Correlation_Data: 0x0A 0x10
status: 0603
Fout bij het gebruik van QoS 0, deel 1
Aanvraag:
-> PUBLISH
QoS: 0
Topic: $iothub/twin/gett # misspelled topic name - server won't recognize it as Request-Response interaction
Correlation_Data: 0x0A 0x10
Payload: <data>
Respons:
<- DISCONNECT
Reason_Code: 144
reason: "Unsupported topic: `$iothub/twin/gett`"
Fout bij het gebruik van QoS 0, deel 2
Aanvraag:
-> PUBLISH # missing Correlation Data
QoS: 0
Topic: $iothub/twin/get
Payload: <data>
Respons:
<- DISCONNECT
Reason_Code: 131
status: 0100
reason: "`Correlation Data` property is missing"
Volgende stappen
- Zie de MQTT 5 API-verwijzing (preview) voor ioT Hub-gegevensvlak MQTT 5 om de naslaginformatie over de MQTT 5 preview-API te bekijken.
- Als u een C#-voorbeeld wilt volgen, raadpleegt u de GitHub-voorbeeldopslagplaats.