Odesílání a příjem zpráv z cloudu na zařízení
Azure IoT Hub je plně spravovaná služba, která umožňuje obousměrnou komunikaci, včetně zpráv typu cloud-zařízení (C2D) z back-endů řešení do milionů zařízení.
Tento článek popisuje, jak pomocí sad SDK Azure IoT sestavit následující typy aplikací:
Aplikace zařízení, které přijímají a zpracovávají zprávy typu cloud-zařízení z fronty zasílání zpráv ioT Hubu.
Back-endové aplikace, které odesílají zprávy typu cloud-zařízení do jednoho zařízení prostřednictvím fronty zasílání zpráv ioT Hubu.
Tento článek je určený k doplnění spustitelných ukázek sady SDK, na které odkazuje tento článek.
Poznámka:
Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Služby IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné úrovně IoT Hubu pro vaše řešení.
Přehled
Aby aplikace zařízení přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit obslužnou rutinu zpráv pro zpracování příchozích zpráv. Sady SDK zařízení Azure IoT Hubu poskytují třídy a metody, které zařízení může použít k příjmu a zpracování zpráv ze služby. Tento článek popisuje klíčové prvky jakékoli aplikace zařízení, která přijímá zprávy, včetně:
- Deklarace objektu klienta zařízení
- Připojení ke službě IoT Hub
- Načtení zpráv z fronty zpráv ioT Hubu
- Zpracování zprávy a odeslání potvrzení zpět do IoT Hubu
- Konfigurace zásady opakování příjmu zpráv
Aby back-endová aplikace odesílala zprávy z cloudu do zařízení, musí se připojit ke službě IoT Hub a odesílat zprávy prostřednictvím fronty zpráv ioT Hubu. Sady SDK služby Azure IoT Hub poskytují třídy a metody, které může aplikace použít k odesílání zpráv do zařízení. Tento článek popisuje klíčové prvky všech aplikací, které odesílají zprávy do zařízení, včetně těchto:
- Deklarace objektu klienta služby
- Připojení ke službě IoT Hub
- Sestavení a odeslání zprávy
- Příjem zpětné vazby k doručení
- Konfigurace zásady opakování odesílání zpráv
Vysvětlení fronty zpráv
Abyste porozuměli zasílání zpráv typu cloud-zařízení, je důležité pochopit některé základní informace o tom, jak fungují fronty zpráv zařízení ioT Hubu.
Zprávy typu cloud-zařízení odeslané z back-endové aplikace řešení do zařízení IoT se směrují přes IoT Hub. Mezi back-endovou aplikací řešení a cílovým zařízením neexistuje žádná přímá komunikace mezi dvěma účastníky. IoT Hub umístí příchozí zprávy do fronty zpráv připravené ke stažení cílovými zařízeními IoT.
Aby se zajistilo alespoň jedno doručení zpráv, ioT Hub udržuje zprávy typu cloud-zařízení ve frontách jednotlivých zařízení. Zařízení musí explicitně potvrdit dokončení zprávy, aby služba IoT Hub odebrala zprávu z fronty. Tento přístup zaručuje odolnost proti chybám připojení a zařízení.
Když IoT Hub vloží zprávu do fronty zpráv zařízení, nastaví stav zprávy do fronty. Když vlákno zařízení převezme zprávu z fronty, IoT Hub zprávu uzamkne nastavením stavu zprávy na Neviditelné. Tento stav brání dalším vláknům v zařízení ve zpracování stejné zprávy. Když vlákno zařízení úspěšně dokončí zpracování zprávy, upozorní ioT Hub a pak IoT Hub nastaví stav zprávy na Dokončeno.
Aplikace zařízení, která úspěšně přijme a zpracuje zprávu, se říká, že má zprávu dokončit . V případě potřeby ale zařízení může také:
- Zamítnout zprávu, která způsobí, že ioT Hub nastaví stav nedoručených zpráv. Zařízení, která se připojují přes protokol MQTT (Message Queuing Telemetry Transport), nemůžou odmítnout zprávy typu cloud-zařízení.
- Opusťte zprávu, která způsobí, že IoT Hub vloží zprávu zpět do fronty se stavem zprávy nastaveným na Zařazení do fronty. Zařízení, která se připojují přes protokol MQTT, nemohou opustit zprávy typu cloud-zařízení.
Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.
Příjem zpráv z cloudu do zařízení
Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí třídy DeviceClient v sadě Azure IoT SDK pro .NET.
Existují dvě možnosti, které může klientská aplikace zařízení použít k příjmu zpráv:
- Dotazování: Aplikace zařízení kontroluje nové zprávy ioT Hubu pomocí smyčky kódu (například smyčky
while
nebofor
smyčky). Smyčka se provádí nepřetržitě a kontroluje zprávy. - Zpětné volání: Aplikace zařízení nastaví asynchronní metodu obslužné rutiny zpráv, která se volá okamžitě při doručení zprávy.
Deklarace objektu DeviceClient
DeviceClient obsahuje metody a vlastnosti potřebné k příjmu zpráv ze služby IoT Hub.
Příklad:
static DeviceClient deviceClient;
Zadejte parametry připojení.
Pomocí metody CreateFromConnectionString zadejte primární připojovací řetězec a ID DeviceClient
zařízení služby IoT Hub. Kromě požadované primární připojovací řetězec IoT Hubu CreateFromConnectionString
je možné tuto metodu přetížit, aby zahrnovala tyto volitelné parametry:
transportType
– Přenosový protokol: varianty HTTP verze 1, AMQP nebo MQTT.AMQP
je výchozí možnost. Pokud chcete zobrazit všechny dostupné hodnoty, přečtěte si téma TransportType – výčet.transportSettings
- Rozhraní sloužící k definování různých nastavení specifických pro přenos aDeviceClient
ModuleClient
. Další informace naleznete v tématu ITransportSettings Rozhraní.ClientOptions
- Možnosti, které umožňují konfiguraci instance klienta zařízení nebo modulu během inicializace.
Tato ukázková volání CreateFromConnectionString
definují DeviceClient
nastavení IoT Hubu připojení a ID zařízení.
static string connectionString = "{your IoT hub connection string}";
static string deviceID = "{your device ID}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString,deviceID);
cyklické dotazování
Při dotazování se kontroluje zprávy pomocí funkce ReceiveAsync .
Volání může ReceiveAsync
mít tyto tvary:
ReceiveAsync()
– Než budete pokračovat, počkejte na výchozí časový limit zprávy.ReceiveAsync (Timespan)
– Obdrží zprávu z fronty zařízení pomocí určitého časového limitu.ReceiveAsync (CancellationToken)
– Přijme zprávu z fronty zařízení pomocí tokenu zrušení. Při použití tokenu zrušení se výchozí období časového limitu nepoužívá.
Při použití typu přenosu HTTP 1 místo MQTT nebo AMQP ReceiveAsync
vrátí metoda okamžitě. Podporovaný vzor zpráv typu cloud-zařízení s protokolem HTTP 1 je přerušovaně připojených zařízení, která kontrolují zprávy zřídka (minimálně každých 25 minut). Při vydávání dalších protokolů HTTP 1 dochází k omezování požadavků ve službě IoT Hub. Další informace o rozdílech mezi podporou MQTT, AMQP a HTTP 1 najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.
Metoda CompleteAsync
Jakmile zařízení obdrží zprávu, aplikace zařízení zavolá metodu CompleteAsync , která ioT Hubu upozorní, že se zpráva úspěšně zpracuje a že zprávu lze bezpečně odebrat z fronty zařízení IoT Hubu. Zařízení by mělo tuto metodu volat, když se jeho zpracování úspěšně dokončí bez ohledu na protokol přenosu, který používá.
Opuštění, odmítnutí nebo vypršení časového limitu zprávy
S protokoly AMQP a HTTP verze 1, ale ne protokolem MQTT, může zařízení také:
- Zprávu opustíte voláním AbandonAsync. Výsledkem je zachování zprávy ve frontě zařízení pro budoucí spotřebu ve službě IoT Hub.
- Zamítnout zprávu voláním RejectAsync. Tím se trvale odebere zpráva z fronty zařízení.
Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.
Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.
Smyčka dotazování
Při dotazování aplikace používá smyčku kódu, která metodu ReceiveAsync
opakovaně volá, aby kontrolila nové zprávy, dokud se nezastaví.
Pokud používáte ReceiveAsync
s hodnotou časového limitu nebo výchozím časovým limitem, ve smyčce každé volání ReceiveAsync
počká na zadanou dobu časového limitu. Pokud ReceiveAsync
vyprší časový limit, null
vrátí se hodnota a smyčka bude pokračovat.
Při přijetí zprávy se vrátí objekt Task, který by měl být předán completeAsync.ReceiveAsync
Volání, které CompleteAsync
službě IoT Hub oznámí odstranění zadané zprávy z fronty zpráv na základě parametru Task
.
V tomto příkladu smyčka volá ReceiveAsync
, dokud se neobdrží zpráva nebo se zastaví smyčka dotazování.
static bool stopPolling = false;
while (!stopPolling)
{
// Check for a message. Wait for the default DeviceClient timeout period.
using Message receivedMessage = await _deviceClient.ReceiveAsync();
// Continue if no message was received
if (receivedMessage == null)
{
continue;
}
else // A message was received
{
// Print the message received
Console.WriteLine($"{DateTime.Now}> Polling using ReceiveAsync() - received message with Id={receivedMessage.MessageId}");
PrintMessage(receivedMessage);
// Notify IoT Hub that the message was received. IoT Hub will delete the message from the message queue.
await _deviceClient.CompleteAsync(receivedMessage);
Console.WriteLine($"{DateTime.Now}> Completed C2D message with Id={receivedMessage.MessageId}.");
}
// Check to see if polling loop should end
stopPolling = ShouldPollingstop ();
}
Zpětné volání
Pokud chcete přijímat zprávy zpětného volání z cloudu do zařízení v aplikaci zařízení, musí se aplikace připojit ke službě IoT Hub a nastavit naslouchací proces zpětného volání pro zpracování příchozích zpráv. Příchozí zprávy do zařízení se přijímají z fronty zpráv ioT Hubu.
Pomocí zpětného volání aplikace zařízení nastaví metodu obslužné rutiny zpráv pomocí SetReceiveMessageHandlerAsync. Obslužná rutina zprávy je volána, pak se přijme zpráva. Vytvoření metody zpětného volání pro příjem zpráv eliminuje potřebu průběžného dotazování na přijaté zprávy.
Zpětné volání je k dispozici pouze pomocí těchto protokolů:
Mqtt
Mqtt_WebSocket_Only
Mqtt_Tcp_Only
Amqp
Amqp_WebSocket_Only
Amqp_Tcp_only
Možnost Http1
protokolu nepodporuje zpětné volání, protože metody SADY SDK by se přesto potřebovaly dotazovat na přijaté zprávy, což porazí princip zpětného volání.
V tomto příkladu SetReceiveMessageHandlerAsync
nastaví metodu obslužné rutiny zpětného volání s názvem OnC2dMessageReceivedAsync
, která se volá při každém přijetí zprávy.
// Subscribe to receive C2D messages through a callback (which isn't supported over HTTP).
await deviceClient.SetReceiveMessageHandlerAsync(OnC2dMessageReceivedAsync, deviceClient);
Console.WriteLine($"\n{DateTime.Now}> Subscribed to receive C2D messages over callback.");
Zásady opakování příjmu zpráv
Zásady opakování zpráv klienta zařízení je možné definovat pomocí DeviceClient.SetRetryPolicy.
Časový limit opakování zprávy je uložen ve vlastnosti DeviceClient.OperationTimeoutInMilliseconds .
Ukázka zprávy příjmu sady SDK
Sada .NET/C# SDK obsahuje ukázku pro příjem zpráv, která obsahuje metody příjmu zpráv popsané v této části.
Odesílání zpráv z cloudu do zařízení
Tato část popisuje základní kód pro odeslání zprávy z back-endové aplikace řešení do zařízení IoT pomocí třídy ServiceClient v sadě Azure IoT SDK pro .NET. Jak je popsáno dříve, back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.
Back-endová aplikace řešení může také požadovat a přijímat zpětnou vazbu k doručení zprávy odeslané do služby IoT Hub, která je určená pro doručování zařízení prostřednictvím fronty zpráv.
Deklarace objektu ServiceClient
ServiceClient obsahuje metody a vlastnosti potřebné k odesílání zpráv z aplikace přes IoT Hub do zařízení.
static ServiceClient serviceClient;
Zadejte připojovací řetězec
Pomocí metody CreateFromConnectionString zadejte primární připojovací řetězec ServiceClient
IoT Hubu. Kromě požadované primární připojovací řetězec IoT Hubu CreateFromConnectionString
je možné tuto metodu přetížit, aby zahrnovala tyto volitelné parametry:
transportType
-Amqp
neboAmqp_WebSocket_Only
.transportSettings
– Nastavení proxy serveru AMQP a HTTP pro klienta služby.ServiceClientOptions
- Možnosti, které umožňují konfiguraci instance klienta služby během inicializace. Další informace naleznete v tématu ServiceClientOptions.
Tento příklad vytvoří ServiceClient
objekt pomocí připojovací řetězec IoT Hubu.
static string connectionString = "{your iot hub connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
Odeslání asynchronní zprávy z cloudu na zařízení
K odeslání asynchronní zprávy z aplikace prostřednictvím cloudu (IoT Hub) do zařízení použijte sendAsync . Volání se provádí pomocí protokolu AMQP.
sendAsync
používá tyto parametry:
deviceID
– Identifikátor řetězce cílového zařízení.message
– Zpráva typu cloud-zařízení. Zpráva je typu Zpráva a lze ji odpovídajícím způsobem naformátovat.timeout
– Volitelná hodnota časového limitu. Výchozí hodnota je jedna minuta, pokud není zadána.
Tento příklad odešle testovací zprávu cílovému zařízení s hodnotou časového limitu 10 sekund.
string targetDevice = "Device-1";
static readonly TimeSpan operationTimeout = TimeSpan.FromSeconds(10);
var commandMessage = new
Message(Encoding.ASCII.GetBytes("Cloud to device message."));
await serviceClient.SendAsync(targetDevice, commandMessage, operationTimeout);
Příjem zpětné vazby k doručení
Odesílající program může požadovat potvrzení o doručení (nebo vypršení platnosti) ze služby IoT Hub pro každou zprávu typu cloud-zařízení. Tato možnost umožňuje odesílajícímu programu používat logiku informování, opakování nebo kompenzace. Úplný popis operací a vlastností zpětné vazby zpráv jsou popsány v části Váš názor na zprávu.
Příjem zpětné vazby k doručení zprávy:
- Vytvoření objektu
feedbackReceiver
- Odesílání zpráv pomocí parametru
Ack
- Počkejte, až dostanete zpětnou vazbu.
Vytvoření objektu feedbackReceiver
Volání GetFeedbackReceiver vytvořit FeedbackReceiver objektu. FeedbackReceiver
obsahuje metody, které mohou služby použít k provádění operací příjmu zpětné vazby.
var feedbackReceiver = serviceClient.GetFeedbackReceiver();
Odesílání zpráv pomocí parametru Ack
Každá zpráva musí obsahovat hodnotu vlastnosti Ack potvrzení o doručení, aby bylo možné dostávat zpětnou vazbu k doručení. Vlastnost Ack
může být jedna z těchto hodnot:
none (výchozí): Nevygeneruje se žádná zpráva zpětné vazby.
Positive
: Pokud byla zpráva dokončena, obdržíte zprávu s zpětnou vazbou.Negative
: Pokud vypršela platnost zprávy (nebo byl dosažen maximální počet doručení), aniž by zařízení dokončilo zprávu.Full
: zpětná vazba k oběmaPositive
výsledkům aNegative
výsledkům.
V tomto příkladu Ack
je vlastnost nastavena na Full
, vyžaduje pozitivní i negativní zpětnou vazbu k doručení jedné zprávy.
var commandMessage = new
Message(Encoding.ASCII.GetBytes("Cloud to device message."));
commandMessage.Ack = DeliveryAcknowledgement.Full;
await serviceClient.SendAsync(targetDevice, commandMessage);
Počkejte, až dostanete zpětnou vazbu.
Definujte .CancellationToken
Pak ve smyčce zavolejte ReceiveAsync opakovaně a kontrolujte zprávy zpětné vazby k doručení. Každé volání, které ReceiveAsync
počká na dobu časového limitu definované pro ServiceClient
objekt.
ReceiveAsync
Pokud vyprší časový limit bez přijetí zprávy,ReceiveAsync
vrátí senull
a smyčka bude pokračovat.- Pokud se přijme zpráva zpětné vazby, vrátí
ReceiveAsync
se objekt Task, který by se měl předat CompleteAsync spolu s tokenem zrušení. Volání, kteréCompleteAsync
odstraní zadanou odeslanou zprávu z fronty zpráv na základě parametruTask
. - V případě potřeby může přijmout kód volat AbandonAsync , aby odeslal zprávu zpět do fronty.
var feedbackReceiver = serviceClient.GetFeedbackReceiver();
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
// Call ReceiveAsync, passing the token. Wait for the timout period.
var feedbackBatch = await feedbackReceiver.ReceiveAsync(token);
if (feedbackBatch == null) continue;
Tento příklad ukazuje metodu, která zahrnuje tyto kroky.
private async static void ReceiveFeedbackAsync()
{
var feedbackReceiver = serviceClient.GetFeedbackReceiver();
Console.WriteLine("\nReceiving c2d feedback from service");
while (true)
{
// Check for messages, wait for the timeout period.
var feedbackBatch = await feedbackReceiver.ReceiveAsync();
// Continue the loop if null is received after a timeout.
if (feedbackBatch == null) continue;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("Received feedback: {0}",
string.Join(", ", feedbackBatch.Records.Select(f => f.StatusCode)));
Console.ResetColor();
await feedbackReceiver.CompleteAsync(feedbackBatch);
}
}
Všimněte si, že tento vzor příjmu zpětné vazby je podobný vzoru používanému k přijímání zpráv typu cloud-zařízení v aplikaci zařízení.
Opětovné připojení klienta služby
Při výskytu výjimky klient služby předá informace volající aplikaci. V tomto okamžiku se doporučuje zkontrolovat podrobnosti o výjimce a provést nezbytná opatření.
Příklad:
- Pokud se jedná o výjimku sítě, můžete operaci zopakovat.
- Pokud se jedná o výjimku zabezpečení (neautorizovanou výjimku), zkontrolujte své přihlašovací údaje a ujistěte se, že jsou aktuální.
- Pokud se jedná o výjimku překročení omezení nebo překročení kvóty, monitorování nebo úpravu frekvence odesílání požadavků nebo aktualizaci jednotky škálování instance centra. Podrobnosti najdete v tématu Kvóty a omezování služby IoT Hub.
Zásady opakování odesílání zpráv
Zásady ServiceClient
opakování zprávy lze definovat pomocí ServiceClient.SetRetryPolicy.
Ukázka zprávy pro odeslání sady SDK
Sada .NET/C# SDK obsahuje ukázku klienta služby, která obsahuje metody odesílání zpráv popsané v této části.
Příjem zpráv z cloudu do zařízení
Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí třídy DeviceClient ze sady Azure IoT SDK pro Javu.
Aby aplikace zařízení založená na Javě přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit naslouchací proces zpětného volání a obslužnou rutinu zpráv pro zpracování příchozích zpráv ze služby IoT Hub. Aplikace zařízení by také měla být schopná rozpoznat a zpracovat odpojení v případě, že dojde k přerušení připojení zpráv typu zařízení-ioT Hub.
Import knihoven sady Azure IoT Java SDK
Kód, na který odkazuje tento článek, používá tyto knihovny sady SDK.
import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException;
import com.microsoft.azure.sdk.iot.device.transport.IotHubConnectionStatus;
Deklarace objektu DeviceClient
Vytvoření instance objektu DeviceClient vyžaduje tyto parametry:
- connString – připojovací řetězec zařízení IoT. Připojovací řetězec je sada párů klíč-hodnota, které jsou oddělené znakem ;, s klíči a hodnotami oddělenými znakem =. Měl by obsahovat hodnoty pro tyto klíče:
HostName, DeviceId, and SharedAccessKey
. - Přenosový protokol –
DeviceClient
Připojení může používat jeden z následujících přenosových protokolů IoTHubClientProtocol .AMQP
je nejuniverzálnější, umožňuje často kontrolovat zprávy a umožňuje odmítnutí a zrušení zprávy. MQTT nepodporuje metody zamítnutí nebo opuštění zprávy:AMQPS
AMQPS_WS
HTTPS
MQTT
MQTT_WS
Příklad:
static string connectionString = "{a device connection string}";
static protocol = IotHubClientProtocol.AMQPS;
DeviceClient client = new DeviceClient(connectionString, protocol);
Nastavení metody zpětného volání zprávy
Pomocí setMessageCallback metoda definovat metodu obslužné rutiny zprávy, která je upozorněna při přijetí zprávy ze služby IoT Hub.
setMessageCallback
zahrnuje tyto parametry:
callback
– Název metody zpětného volání. Může to býtnull
.context
- Volitelný kontext typuobject
. Použijtenull
, pokud není zadáno.
V tomto příkladu callback
je setMessageCallback
předána metoda s názvem MessageCallback
bez parametru kontextu .
client.setMessageCallback(new MessageCallback(), null);
Vytvoření obslužné rutiny zpětného volání zprávy
Obslužná rutina zprávy zpětného volání přijímá a zpracovává příchozí zprávu předanou z fronty zpráv ioT Hubu.
V tomto příkladu obslužná rutina zprávy zpracuje příchozí zprávu a pak vrátí IotHubMessageResult.COMPLETE. Návratová IotHubMessageResult.COMPLETE
hodnota oznámí službě IoT Hub, že zpráva byla úspěšně zpracována a že zprávu je možné bezpečně odebrat z fronty zařízení. Zařízení by se mělo vrátit IotHubMessageResult.COMPLETE
po úspěšném dokončení zpracování a upozornit IoT Hub, že by se zpráva měla odebrat z fronty zpráv bez ohledu na protokol, který používá.
protected static class MessageCallback implements com.microsoft.azure.sdk.iot.device.MessageCallback
{
public IotHubMessageResult onCloudToDeviceMessageReceived(Message msg, Object context)
{
System.out.println(
"Received message with content: " + new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET));
// Notify IoT Hub that the message
return IotHubMessageResult.COMPLETE;
}
}
Možnosti opuštění a odmítnutí zprávy
I když by měl být do zařízení úspěšně přijat velký počet příchozích zpráv, IotHubMessageResult.COMPLETE
může být nutné zprávu opustit nebo odmítnout.
- S AMQP a HTTPS, ale ne MQTT může aplikace:
IotHubMessageResult.ABANDON
zpráva. IoT Hub ho znovu odešle a odešle ho později.IotHubMessageResult.REJECT
zpráva. IoT Hub zprávu nepřeřadí do fronty a trvale ji odebere z fronty zpráv.
- Klienti používající
MQTT
neboMQTT_WS
nemohouABANDON
neboREJECT
zprávy.
Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.
Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.
Poznámka:
Pokud jako přenos použijete protokol HTTPS místo MQTT nebo AMQP, instance DeviceClient kontroluje zprávy ze služby IoT Hub zřídka (minimálně každých 25 minut). Další informace o rozdílech mezi podporou MQTT, AMQP a HTTPS najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.
Vytvoření metody zpětného volání stavu zprávy
Aplikace může použít registerConnectionStatusChangeCallback k registraci metody zpětného volání, která se má provést při změně stavu připojení zařízení. Tímto způsobem může aplikace rozpoznat připojení ke zprávě mimo provoz a pokusit se znovu připojit.
V tomto příkladu IotHubConnectionStatusChangeCallbackLogger
se zaregistruje jako metoda zpětného volání změny stavu připojení.
client.registerConnectionStatusChangeCallback(new IotHubConnectionStatusChangeCallbackLogger(), new Object());
Zpětné volání se aktivuje a předá ConnectionStatusChangeContext
objekt.
Volání connectionStatusChangeContext.getNewStatus()
pro získání aktuálního stavu připojení
IotHubConnectionStatus status = connectionStatusChangeContext.getNewStatus();
Vrácený stav připojení může být jedna z těchto hodnot:
IotHubConnectionStatus.DISCONNECTED
IotHubConnectionStatus.DISCONNECTED_RETRYING
IotHubConnectionStatus.CONNECTED
Zavolejte connectionStatusChangeContext.getNewStatusReason()
a získejte důvod změny stavu připojení.
IotHubConnectionStatusChangeReason statusChangeReason = connectionStatusChangeContext.getNewStatusReason();
Voláním connectionStatusChangeContext.getCause()
zjistíte důvod změny stavu připojení. getCause()
může vrátit, null
pokud nejsou k dispozici žádné informace.
Throwable throwable = connectionStatusChangeContext.getCause();
if (throwable != null)
throwable.printStackTrace();
Podívejte se na ukázku HandleMessages uvedenou v části s ukázkou zprávy v tomto článku o úplné ukázce, která ukazuje, jak extrahovat stav změny stavu změny stavu připojení metody zpětného volání, důvod, proč se stav zařízení změnil, a kontext.
Otevření připojení mezi zařízením a IoT Hubem
Otevřením vytvoříte připojení mezi zařízením a IoT Hubem. Zařízení teď může asynchronně odesílat a přijímat zprávy do a ze služby IoT Hub. Pokud je klient již otevřený, metoda nic nedělá.
client.open(true);
Ukázka zprávy příjmu sady SDK
HandleMessages: ukázková aplikace zařízení, která je součástí sady Microsoft Azure IoT SDK pro Javu, která se připojuje k centru IoT a přijímá zprávy typu cloud-zařízení.
Odesílání zpráv z cloudu do zařízení
Tato část popisuje, jak odeslat zprávu typu cloud-zařízení pomocí třídy ServiceClient ze sady Azure IoT SDK pro Javu. Back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.
Back-endová aplikace řešení může také požadovat a přijímat zpětnou vazbu k doručení zprávy odeslané do služby IoT Hub, která je určená pro doručování zařízení prostřednictvím fronty zpráv.
Přidání příkazu závislostí
Přidejte závislost pro použití balíčku iothub-java-service-client ve vaší aplikaci ke komunikaci se službou IoT Hub:
<dependency>
<groupId>com.microsoft.azure.sdk.iot</groupId>
<artifactId>iot-service-client</artifactId>
<version>1.7.23</version>
</dependency>
Přidání příkazů importu
Přidejte tyto příkazy importu pro použití sady Azure IoT Java SDK a obslužné rutiny výjimek.
import com.microsoft.azure.sdk.iot.service.*;
import java.io.IOException;
import java.net.URISyntaxException;
Definování protokolu připojení
Pomocí IotHubServiceClientProtocol definujte protokol aplikační vrstvy používaný klientem služby ke komunikaci se službou IoT Hub.
IotHubServiceClientProtocol
přijímá pouze výčet AMQPS
nebo AMQPS_WS
výčt.
private static final IotHubServiceClientProtocol protocol =
IotHubServiceClientProtocol.AMQPS;
Vytvoření objektu ServiceClient
Vytvořte objekt ServiceClient a zadejte připojovací řetězec a protokol iot Hubu.
private static final String connectionString = "{yourhubconnectionstring}";
private static final ServiceClient serviceClient (connectionString, protocol);
Otevření připojení mezi aplikací a IoT Hubem
otevřete připojení odesílatele AMQP. Tato metoda vytvoří připojení mezi aplikací a IoT Hubem.
serviceClient.open();
Otevření příjemce zpětné vazby pro odeslání zprávy
Pomocí feedbackReceiveru FeedbackReceiver můžete do ioT Hubu odeslat zpětnou vazbu do služby IoT Hub. A FeedbackReceiver
je specializovaný přijímač, jehož Receive
metoda vrací FeedbackBatch
místo Message
.
V tomto příkladu FeedbackReceiver
se objekt vytvoří a zavolá se open()
příkaz, který bude čekat na zpětnou vazbu.
FeedbackReceiver feedbackReceiver = serviceClient
.getFeedbackReceiver();
if (feedbackReceiver != null) feedbackReceiver.open();
Přidání vlastností zprávy
Volitelně můžete použít setProperties k přidání vlastností zprávy. Tyto vlastnosti jsou zahrnuty do zprávy odeslané do zařízení a aplikace zařízení je může extrahovat po přijetí.
Map<String, String> propertiesToSend = new HashMap<String, String>();
propertiesToSend.put(messagePropertyKey,messagePropertyKey);
messageToSend.setProperties(propertiesToSend);
Vytvoření a odeslání asynchronní zprávy
Objekt Message ukládá zprávu, která se má odeslat. V tomto příkladu se doručí zpráva Typu cloud-zařízení.
Pomocí setDeliveryAcknowledgement můžete požadovat doručení nebo nedoručení do fronty zpráv ioT Hubu. V tomto příkladu je Full
žádost o potvrzení doručena nebo nedoručována.
K odeslání asynchronní zprávy z klienta do zařízení použijte SendAsync . Alternativně můžete použít metodu Send
(nesync), ale tato funkce se synchronizuje interně, takže najednou je povolená jenom jedna operace odeslání. Zpráva se doručí z aplikace do IoT Hubu. IoT Hub umístí zprávu do fronty zpráv připravené k doručení do cílového zařízení.
Message messageToSend = new Message("Cloud to device message.");
messageToSend.setDeliveryAcknowledgementFinal(DeliveryAcknowledgement.Full);
serviceClient.sendAsync(deviceId, messageToSend);
Příjem zpětné vazby k doručení zprávy
Po odeslání zprávy z aplikace může aplikace volat s hodnotou časového limitu nebo bez této zprávy. Pokud není zadána hodnota časového limitu, použije se výchozí časový limit. Tím se předá zpět objekt FeedbackBatch , který obsahuje vlastnosti zpětné vazby pro doručení zprávy, které je možné prozkoumat.
Tento příklad vytvoří FeedbackBatch
příjemce a volání getEnqueuedTimeUtc, tisk zprávy vyčtený čas.
FeedbackBatch feedbackBatch = feedbackReceiver.receive(10000);
if (feedbackBatch != null) {
System.out.println("Message feedback received, feedback time: "
+ feedbackBatch.getEnqueuedTimeUtc().toString());
}
Ukázky zpráv odesílané sadou SDK
Ukázka klienta služby – příklad odeslání zprávy, #1
Ukázka klienta služby – příklad odeslání zprávy, #2
Instalace knihovny azure IoT SDK
Před voláním souvisejícího kódu nainstalujte na vývojovém počítači knihovnu azure-iot-device SDK:
pip install azure-iot-device
Existují dvě třídy sady Python SDK, které slouží k odesílání zpráv do a ze zařízení IoT. Metody zpracování zpráv z těchto tříd jsou popsány v oddílech na této stránce.
Třída IoTHubDeviceClient obsahuje metody pro vytvoření synchronního připojení ze zařízení do služby Azure IoT Hub a příjem zpráv ze služby IoT Hub.
Třída IoTHubRegistryManager obsahuje rozhraní API pro operace Správce registru služby IoT Hub. V tomto článku metody z této třídy ukazují, jak se připojit ke službě IoT Hub a odeslat zprávu do zařízení.
Příjem zpráv z cloudu do zařízení
Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí třídy IoTHubDeviceClient ze sady Azure IoT SDK pro Python.
Aby aplikace zařízení založená na Pythonu přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit obslužnou rutinu zpětného volání pro zpracování příchozích zpráv ze služby IoT Hub.
Import objektu IoTHubDeviceClient
Přidejte řádek kódu pro import IoTHubDeviceClient
funkcí ze sady AZURE.iot.device SDK.
from azure.iot.device import IoTHubDeviceClient
Připojení klienta zařízení
Vytvořte instanci IoTHubDeviceClient a předáte připojovací řetězec IoT Hubu do create_from_connection_string. Tím se ze zařízení vytvoří připojení ke službě IoT Hub.
Alternativně se můžete připojit IoTHubDeviceClient
k zařízení pomocí jedné z těchto metod:
deviceConnectionString = "{your IoT hub connection string}";
client = IoTHubDeviceClient.create_from_connection_string ({deviceConnectionString})
Zpracování opětovného připojení
IoTHubDeviceClient
ve výchozím nastavení se pokusí znovu vytvořit přerušené připojení. Chování opětovného IoTHubDeviceClient
připojení se řídí connection_retry a connection_retry_interval
parametry.
Vytvoření obslužné rutiny zprávy
Vytvořte funkci obslužné rutiny zprávy pro zpracování příchozích zpráv do zařízení.
V tomto příkladu message_handler
je volána při přijetí zprávy. Vlastnosti zprávy (.items
) se vytisknou do konzoly pomocí smyčky.
def message_handler(message):
global RECEIVED_MESSAGES
RECEIVED_MESSAGES += 1
print("")
print("Message received:")
# print data from both system and application (custom) properties
for property in vars(message).items():
print (" {}".format(property))
print("Total calls received: {}".format(RECEIVED_MESSAGES))
Přiřazení obslužné rutiny zprávy
V tomto příkladu je k objektu IoTHubDeviceClient
client
připojena metoda message_handler
obslužné rutiny zprávy. Objekt client
čeká na přijetí zprávy typu cloud-zařízení ze služby IoT Hub. Tento kód počká až 300 sekund (5 minut) na zprávu nebo se ukončí, pokud je stisknutá klávesa klávesnice.
try:
# Attach the handler to the client
client.on_message_received = message_handler
while True:
time.sleep(300)
except KeyboardInterrupt:
print("IoT Hub C2D Messaging device sample stopped")
finally:
# Graceful exit
print("Shutting down IoT Hub Client")
client.shutdown()
Ukázka zprávy příjmu sady SDK
Přijmout zprávu – příjem zpráv typu cloud-zařízení (C2D) odesílaných ze služby Azure IoT Hub do zařízení
Odesílání zpráv z cloudu do zařízení
Tato část popisuje, jak odeslat zprávu typu cloud-zařízení pomocí třídy IoTHubRegistryManager ze sady Azure IoT SDK pro Python. Back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.
Import objektu IoTHubRegistryManager
Přidejte následující import
příkaz. IoTHubRegistryManager zahrnuje rozhraní API pro operace Správce registru služby IoT Hub.
from azure.iot.hub import IoTHubRegistryManager
Připojení správce registru služby IoT Hub
Vytvořte instanci objektu IoTHubRegistryManager, který se připojuje k centru IoT a předává připojovací řetězec IoT Hubu do from_connection_string.
IoTHubConnectionString = "{Primary connection string to an IoT hub}"
registry_manager = IoTHubRegistryManager.from_connection_string(IoTHubConnectionString)
Sestavení a odeslání zprávy
Pomocí send_c2d_message odešlete do zařízení zprávu přes cloud (IoT Hub).
send_c2d_message
používá tyto parametry:
deviceID
– Identifikátor řetězce cílového zařízení.message
– Zpráva typu cloud-zařízení. Zpráva je typustr
(řetězec).properties
- Volitelná kolekce vlastností typudict
. Vlastnosti mohou obsahovat vlastnosti aplikace a systémové vlastnosti. Výchozí hodnota je{}
.
Tento příklad odešle testovací zprávu cílovému zařízení.
# define the device ID
deviceID = "Device-1"
# define the message
message = "{\"c2d test message\"}"
# include optional properties
props={}
props.update(messageId = "message1")
props.update(prop1 = "test property-1")
props.update(prop1 = "test property-2")
prop_text = "Test message"
props.update(testProperty = prop_text)
# send the message through the cloud (IoT Hub) to the device
registry_manager.send_c2d_message(deviceID, message, properties=props)
Ukázka zprávy pro odeslání sady SDK
send_message.py – ukazuje, jak odeslat zprávu typu cloud-zařízení.
Instalace balíčků zasílání zpráv Node.js
Spuštěním těchto příkazů nainstalujte balíčky azure-iot-device a azure-iothub na vývojový počítač:
npm install azure-iot-device --save
npm install azure-iothub --save
Balíček zařízení azure-iot-device obsahuje objekty, které jsou rozhraní se zařízeními IoT. Tento článek popisuje Client
kód třídy, který přijímá zprávy ze služby IoT Hub.
Balíček azure-iothub obsahuje objekty, které jsou rozhraní se službou IoT Hub. Tento článek popisuje Client
kód třídy, který odesílá zprávu z aplikace do zařízení prostřednictvím IoT Hubu.
Příjem zpráv v aplikaci zařízení
Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí balíčku azure-iot-device v sadě Azure IoT SDK pro Node.js.
Aby aplikace zařízení založená na Node.js přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit naslouchací proces zpětného volání a obslužnou rutinu zpráv pro zpracování příchozích zpráv ze služby IoT Hub. Aplikace zařízení by také měla být schopná rozpoznat a zpracovat odpojení v případě, že dojde k přerušení připojení zpráv typu zařízení-ioT Hub.
Vytvoření klientského modulu
azure-iot-device
Z balíčku vytvořte Client
pomocí třídy Client. Třída Client
obsahuje metody, které zařízení může použít k příjmu a odesílání do IoT Hubu.
const Client = require('azure-iot-device').Client;
Volba přenosového protokolu
Objekt Client
podporuje tyto protokoly:
Amqp
Http
– Při použitíHttp
Client
instance kontroluje zprávy ze služby IoT Hub zřídka (minimálně každých 25 minut).Mqtt
MqttWs
AmqpWs
Další informace o rozdílech mezi podporou MQTT, AMQP a HTTPS najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.
Tento příklad přiřadí protokol AMQP proměnné Protocol
. Tato proměnná protokolu se předává Client.fromConnectionString
metodě v části Přidání připojovací řetězec tohoto článku.
const Protocol = require('azure-iot-device-mqtt').Amqp;
Možnosti dokončování, zamítnutí a opuštění zpráv
V závislosti na zvoleném protokolu je možné použít metody dokončování zpráv, zamítnutí a opuštění.
AMQP a HTTP
Přenosy AMQP a HTTP můžou zprávu dokončit, odmítnout nebo opustit:
- Dokončeno – K dokončení zprávy je služba, která odeslala zprávu typu cloud-zařízení, upozorněna na přijetí zprávy. IoT Hub odebere zprávu z fronty zpráv. Metoda má formu
client.complete(message, callback function)
. - Odmítnout – Pokud chcete odmítnout zprávu, služba, která odeslala zprávu typu cloud-zařízení, je upozorněna, že zařízení zprávu nezpracová. IoT Hub trvale odebere zprávu z fronty zařízení. Metoda má formu
client.reject(message, callback function)
. - Opuštění – Pokud chcete zprávu opustit, IoT Hub se ji okamžitě pokusí znovu odeslat. IoT Hub uchovává zprávu ve frontě zařízení pro budoucí spotřebu. Metoda má formu
client.abandon(message, callback function)
.
MQTT
MQTT nepodporuje funkce dokončení, odmítnutí nebo opuštění zprávy. Místo toho MQTT přijme ve výchozím nastavení zprávu a zpráva se odebere z fronty zpráv ioT Hubu.
Opakované pokusy
Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.
Přidání řetězce a přenosového protokolu ioT Hubu
Volání zConnectionString k navázání připojení typu device-to-IoT Hub pomocí těchto parametrů:
- connStr – připojovací řetězec, která zapouzdřuje oprávnění "device connect" pro centrum IoT. Připojovací řetězec obsahuje název hostitele, ID zařízení a sdílený přístupový klíč v tomto formátu: HostName=<iothub_host_name>; DeviceId=<device_id>; SharedAccessKey=<device_key>"
- transportCtor - transportní protokol.
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);
Vytvoření obslužné rutiny příchozí zprávy
Obslužná rutina zprávy se volá pro každou příchozí zprávu.
Po úspěšném přijetí zprávy, pokud používáte přenos AMQP nebo HTTP, zavolejte metodu client.complete
, která informuje IoT Hub, že zprávu lze odebrat z fronty zpráv.
Tato obslužná rutina zprávy například vytiskne ID zprávy a text zprávy do konzoly a potom zavolá client.complete
, aby ioT Hub oznámila, že zprávu zpracovala a že se dá bezpečně odebrat z fronty zařízení. Volání complete
není vyžadováno, pokud používáte přenos MQTT a je možné ho vynechat. Pro přenos protokolu AMQP nebo HTTPS se vyžaduje volánícomplete
.
function messageHandler(msg) {
console.log('Id: ' + msg.messageId + ' Body: ' + msg.data);
client.complete(msg, printResultFor('completed'));
}
Vytvoření obslužné rutiny odpojení připojení
Obslužná rutina odpojení se volá při odpojení připojení. Obslužná rutina odpojení je užitečná pro implementaci kódu pro opětovné připojení.
Tento příklad zachytí a zobrazí chybovou zprávu odpojení ke konzole.
function disconnectHandler() {
clearInterval(sendInterval);
sendInterval = null;
client.open().catch((err) => {
console.error(err.message);
});
}
Přidání naslouchacích procesů událostí
Tyto naslouchací procesy událostí můžete zadat pomocí metody .on .
- Obslužná rutina připojení
- Obslužná rutina chyby
- Obslužná rutina odpojení
- Obslužná rutina zprávy
Tento příklad zahrnuje obslužné rutiny zpráv a odpojení definované dříve.
client.on('connect', connectHandler);
client.on('error', errorHandler);
client.on('disconnect', disconnectHandler);
client.on('message', messageHandler);
Otevření připojení ke službě IoT Hub
Pomocí otevřené metody otevřete připojení mezi zařízením IoT a IoT Hubem.
Slouží .catch(err)
k zachycení kódu obslužné rutiny chyby a volání.
Příklad:
client.open()
.catch((err) => {
console.error('Could not connect: ' + err.message);
});
Ukázka zprávy příjmu sady SDK
simple_sample_device – aplikace zařízení, která se připojuje k centru IoT a přijímá zprávy typu cloud-zařízení.
Odesílání zpráv z cloudu do zařízení
Tato část popisuje, jak odeslat zprávu typu cloud-zařízení pomocí balíčku azure-iothub ze sady Azure IoT SDK pro Node.js. Jak je popsáno dříve, back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.
Back-endová aplikace řešení může také požadovat a přijímat zpětnou vazbu k doručení zprávy odeslané do služby IoT Hub, která je určená pro doručování zařízení prostřednictvím fronty zpráv.
Načtení modulů klienta a zpráv
Deklarujte Client
objekt pomocí Client
třídy z azure-iothub
balíčku.
Deklarujte Message
objekt pomocí Message
třídy z azure-iot-common
balíčku.
'use strict';
var Client = require('azure-iothub').Client;
var Message = require('azure-iot-common').Message;
Vytvoření objektu Klienta
Pomocí těchto parametrů vytvořte klienta zConnectionString:
- připojovací řetězec ioT Hubu
- Typ přenosu
V tomto příkladu serviceClient
se objekt vytvoří s typem Amqp
přenosu.
var connectionString = '{IoT Hub connection string}';
var serviceClient = Client.fromConnectionString(connectionString,`Amqp`);
Otevření připojení klienta
Voláním Client
otevřené metody otevřete připojení mezi aplikací a IoT Hubem.
open
lze volat pomocí nebo bez zadání funkce zpětného volání, která je volána po open
dokončení operace.
V tomto příkladu metoda open
obsahuje volitelnou err
funkci zpětného volání otevřeného připojení. Pokud dojde k otevřené chybě, vrátí se objekt chyby. Pokud je otevřené připojení úspěšné, vrátí se hodnota zpětného null
volání.
serviceClient.open(function (err)
if (err)
console.error('Could not connect: ' + err.message);
Vytvoření zprávy
Objekt zprávy obsahuje asynchronní zprávu typu cloud-zařízení. Funkce zpráv funguje stejně jako funkce AMQP, MQTT a HTTP.
Objekt zprávy podporuje několik vlastností, včetně těchto vlastností. Podívejte se na vlastnosti zprávy pro úplný seznam.
ack
- Zpětná vazba k doručení. Popsáno v další části.properties
– Mapa obsahující řetězcové klíče a hodnoty pro ukládání vlastních vlastností zprávy.- messageId – používá se ke korelaci obousměrné komunikace.
Po vytvoření instance objektu zprávy přidejte text zprávy. V tomto příkladu 'Cloud to device message.'
se přidá zpráva.
var message = new Message('Cloud to device message.');
message.ack = 'full';
message.messageId = "My Message ID";
Potvrzení doručení
Odesílající program může požadovat potvrzení o doručení (nebo vypršení platnosti) ze služby IoT Hub pro každou zprávu typu cloud-zařízení. Tato možnost umožňuje odesílajícímu programu používat logiku informování, opakování nebo kompenzace. Úplný popis operací a vlastností zpětné vazby zpráv jsou popsány v části Váš názor na zprávu.
Každá zpráva, která má přijímat zpětnou vazbu zprávy, musí obsahovat hodnotu pro potvrzení doručení ack vlastnost. Vlastnost ack
může být jedna z těchto hodnot:
none (výchozí): Nevygeneruje se žádná zpráva zpětné vazby.
sent
: Pokud byla zpráva dokončena, obdržíte zprávu s zpětnou vazbou.: Pokud vypršela platnost zprávy (nebo byl dosažen maximální počet doručení), aniž by zařízení dokončilo zprávu.
full
: Zpětná vazba pro odeslané i neodesílané výsledky.
V tomto příkladu ack
je vlastnost nastavena na full
, požadovat odeslání i neodeslanou zpětnou vazbu k doručení zprávy pro jednu zprávu.
message.ack = 'full';
Propojení příjemce zpětné vazby zprávy
Funkce zpětného volání příjemce zpětné vazby zprávy je propojena s Client
použitím getFeedbackReceiver.
Příjemce zpětné vazby zprávy obdrží dva argumenty:
- Objekt chyby (může mít hodnotu null)
- AmqpReceiver – Generuje události, když klient obdrží nové zprávy zpětné vazby.
Tato ukázková funkce obdrží a vytiskne zprávu o doručení zpětné vazby do konzoly.
function receiveFeedback(err, receiver){
receiver.on('message', function (msg) {
console.log('Feedback message:')
console.log(msg.getData().toString('utf-8'));
});
}
Tento kód propojí funkci zpětného receiveFeedback
volání zpětné vazby s objektem služby Client
pomocí getFeedbackReceiver
.
serviceClient.getFeedbackReceiver(receiveFeedback);
Definování obslužné rutiny výsledků dokončování zpráv
Funkce zpětného volání pro odeslání zprávy se volá po odeslání každé zprávy.
Tato ukázková funkce vytiskne výsledky operace zpráv send
do konzoly. V tomto příkladu printResultFor
je funkce zadána jako parametr send
funkce popsané v další části.
function printResultFor(op) {
return function printResult(err, res) {
if (err) console.log(op + ' error: ' + err.toString());
if (res) console.log(op + ' status: ' + res.constructor.name);
};
}
Odeslání zprávy
Pomocí funkce odeslání odešlete asynchronní zprávu typu cloud-zařízení do aplikace zařízení prostřednictvím IoT Hubu.
send
podporuje tyto parametry:
- deviceID – ID zařízení cílového zařízení.
- message – text zprávy, která se má odeslat do zařízení.
- done – volitelná funkce, která se má volat při dokončení operace. Hotovo se volá se dvěma argumenty:
- Objekt chyby (může mít hodnotu null).
- Objekt odpovědi specifický pro přenos, který je užitečný pro protokolování nebo ladění.
Tento kód volá send
odeslání zprávy typu cloud-zařízení do aplikace zařízení prostřednictvím IoT Hubu. Funkce printResultFor
zpětného volání definovaná v předchozí části obdrží informace o potvrzení doručení.
var targetDevice = '{device ID}';
serviceClient.send(targetDevice, message, printResultFor('send'));
Tento příklad ukazuje, jak odeslat zprávu do zařízení a zpracovat zprávu zpětné vazby, když zařízení potvrdí zprávu typu cloud-zařízení:
serviceClient.open(function (err) {
if (err) {
console.error('Could not connect: ' + err.message);
} else {
console.log('Service client connected');
serviceClient.getFeedbackReceiver(receiveFeedback);
var message = new Message('Cloud to device message.');
message.ack = 'full';
message.messageId = "My Message ID";
console.log('Sending message: ' + message.getData());
serviceClient.send(targetDevice, message, printResultFor('send'));
}
});
Ukázka zprávy pro odeslání sady SDK
send_c2d_message.js – Odesílání zpráv C2D do zařízení prostřednictvím IoT Hubu
Zásady opětovného připojení připojení
Tento článek neuvádí zásadu opakování zpráv pro zařízení pro připojení ke službě IoT Hub nebo externí aplikaci pro připojení ke službě IoT Hub. V produkčním kódu byste měli implementovat zásady opakování připojení, jak je popsáno v části Správa opětovného připojení zařízení, abyste vytvořili odolné aplikace.
Doba uchovávání zpráv, pokusy o opakování a maximální počet doručení
Jak je popsáno v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub, můžete zobrazit a nakonfigurovat výchozí hodnoty pro následující hodnoty zpráv pomocí možností konfigurace služby IoT Hub na portálu nebo Azure CLI. Tyto možnosti konfigurace můžou ovlivnit doručování zpráv a zpětnou vazbu.
- Výchozí hodnota TTL (doba trvání) – doba, po kterou je zpráva dostupná pro zařízení, aby ji spotřebovalo, než služba IoT Hub vypršela.
- Doba uchovávání zpětné vazby – doba, po kterou služba IoT Hub uchovává zpětnou vazbu k vypršení platnosti nebo doručování zpráv z cloudu do zařízení.
- Kolikrát se IoT Hub pokusí do zařízení doručit zprávu typu cloud-zařízení.