Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Publish/subscribe AWS IoT Core MQTT-Nachrichten
Mit dem AWS IoT Core MQTT-Messaging-IPC-Dienst können Sie MQTT-Nachrichten an und von senden und empfangen. AWS IoT Core Komponenten können Nachrichten an Themen veröffentlichen AWS IoT Core und Themen abonnieren, um auf MQTT-Nachrichten aus anderen Quellen zu reagieren. Weitere Informationen zur AWS IoT Core Implementierung von MQTT finden Sie unter MQTT im AWS IoT Core Entwicklerhandbuch.
Anmerkung
Mit diesem MQTT-Messaging-IPC-Dienst können Sie Nachrichten mit austauschen. AWS IoT Core Weitere Hinweise zum Nachrichtenaustausch zwischen Komponenten finden Sie unter. Lokale Nachrichten veröffentlichen/abonnieren
Themen
Minimale SDK-Versionen
In der folgenden Tabelle sind die Mindestversionen der SDKs aufgeführt, die Sie zum Veröffentlichen und Abonnieren von MQTT-Nachrichten an und von dort verwenden können. AWS IoT Core
| SDK | Mindestversion |
|---|---|
|
v1.0.0 |
|
|
v1.2.10 |
|
|
v1.5.3 |
|
|
v1.17.0 |
|
|
v1.12.0 |
Autorisierung
Um AWS IoT Core MQTT-Messaging in einer benutzerdefinierten Komponente zu verwenden, müssen Sie Autorisierungsrichtlinien definieren, die es Ihrer Komponente ermöglichen, Nachrichten zu Themen zu senden und zu empfangen. Hinweise zur Definition von Autorisierungsrichtlinien finden Sie unterAutorisieren Sie Komponenten zur Ausführung von IPC-Vorgängen.
Autorisierungsrichtlinien für AWS IoT Core MQTT-Nachrichten haben die folgenden Eigenschaften.
IPC-Dienst-ID: aws.greengrass.ipc.mqttproxy
| Operation | Description | Ressourcen |
|---|---|---|
|
|
Ermöglicht einer Komponente, Nachrichten zu den von Ihnen AWS IoT Core angegebenen MQTT-Themen zu veröffentlichen. |
Eine Themenzeichenfolge wie oder |
|
|
Ermöglicht einer Komponente, Nachrichten zu den von Ihnen AWS IoT Core angegebenen Themen zu abonnieren. |
Eine Themenzeichenfolge, z. B. oder |
|
|
Ermöglicht einer Komponente, AWS IoT Core MQTT-Nachrichten für die von Ihnen angegebenen Themen zu veröffentlichen und zu abonnieren. |
Eine Themenzeichenfolge wie oder |
MQTT-Platzhalter in AWS IoT Core MQTT-Autorisierungsrichtlinien
Sie können MQTT-Platzhalter in AWS IoT Core MQTT-IPC-Autorisierungsrichtlinien verwenden. Komponenten können Themen veröffentlichen und abonnieren, die dem Themenfilter entsprechen, den Sie in einer Autorisierungsrichtlinie zulassen. Wenn beispielsweise die Autorisierungsrichtlinie einer Komponente Zugriff auf gewährttest/topic/#, kann die Komponente diese abonnierentest/topic/#, veröffentlichen und abonnierentest/topic/filter.
Rezeptvariablen in AWS IoT Core MQTT-Autorisierungsrichtlinien
Wenn Sie Version 2.6.0 oder höher des Greengrass Nucleus verwenden, können Sie die {iot:thingName} Rezepturvariable in Autorisierungsrichtlinien verwenden. Mit dieser Funktion können Sie eine einzige Autorisierungsrichtlinie für eine Gruppe von Kerngeräten konfigurieren, wobei jedes Kerngerät nur auf Themen zugreifen kann, die seinen eigenen Namen enthalten. Beispielsweise können Sie einer Komponente den Zugriff auf die folgende Themenressource gewähren.
devices/{iot:thingName}/messages
Weitere Informationen erhalten Sie unter Rezeptvariablen und Verwenden Sie Rezeptvariablen bei Merge-Updates.
Beispiele für Autorisierungsrichtlinien
Anhand der folgenden Beispiele für Autorisierungsrichtlinien können Sie sich bei der Konfiguration von Autorisierungsrichtlinien für Ihre Komponenten orientieren.
Beispiel Beispiel für eine Autorisierungsrichtlinie mit uneingeschränktem Zugriff
Das folgende Beispiel für eine Autorisierungsrichtlinie ermöglicht es einer Komponente, alle Themen zu veröffentlichen und zu abonnieren.
Beispiel Beispiel für eine Autorisierungsrichtlinie mit eingeschränktem Zugriff
Das folgende Beispiel für eine Autorisierungsrichtlinie ermöglicht es einer Komponente, zwei Themen mit dem Namen und zu veröffentlichen factory/1/events und zu abonnierenfactory/1/actions.
Beispiel Beispiel für eine Autorisierungsrichtlinie für eine Gruppe von Kerngeräten
Wichtig
In diesem Beispiel wird eine Funktion verwendet, die für Version 2.6.0 und höher der Greengrass Nucleus-Komponente verfügbar ist. Greengrass Nucleus v2.6.0 bietet Unterstützung für die meisten Rezeptvariablen, z. B. in Komponentenkonfigurationen. {iot:thingName}
Das folgende Beispiel für eine Autorisierungsrichtlinie ermöglicht es einer Komponente, ein Thema zu veröffentlichen und zu abonnieren, das den Namen des Kerngeräts enthält, auf dem die Komponente ausgeführt wird.
PublishToIoTCore
Veröffentlicht eine MQTT-Nachricht zu einem AWS IoT Core Thema.
Wenn Sie MQTT-Nachrichten veröffentlichen AWS IoT Core, gibt es ein Kontingent von 100 Transaktionen pro Sekunde. Wenn Sie dieses Kontingent überschreiten, werden Nachrichten zur Verarbeitung auf dem Greengrass-Gerät in die Warteschlange gestellt. Außerdem gibt es ein Kontingent von 512 KB an Daten pro Sekunde und ein kontoweites Kontingent von 20.000 Veröffentlichungen pro Sekunde (in einigen Fällen 2.000). AWS-Regionen Weitere Informationen zu den Grenzwerten für MQTT-Message-Broker finden Sie unter Grenzwerte und Kontingente für AWS IoT Core Message Broker und Protokolle. AWS IoT Core
Wenn Sie diese Kontingente überschreiten, begrenzt das Greengrass-Gerät das Veröffentlichen von Nachrichten auf. AWS IoT Core Nachrichten werden in einem Spooler im Speicher gespeichert. Standardmäßig beträgt der dem Spooler zugewiesene Speicher 2,5 MB. Wenn der Spooler voll ist, werden neue Nachrichten zurückgewiesen. Sie können den Spooler vergrößern. Weitere Informationen finden Sie unter Konfiguration in der Grüngras-Kern-Dokumentation. Um zu vermeiden, dass der Spooler voll wird und der zugewiesene Speicher erhöht werden muss, beschränken Sie die Veröffentlichungsanforderungen auf nicht mehr als 100 Anfragen pro Sekunde.
Wenn Ihre Anwendung Nachrichten mit einer höheren Geschwindigkeit oder größere Nachrichten senden muss, sollten Sie erwägen, die Stream-Manager zum Senden von Nachrichten an Kinesis Data Streams zu verwenden. Die Stream Manager-Komponente ist für die Übertragung großer Datenmengen an den konzipiert. AWS Cloud Weitere Informationen finden Sie unter Datenströme auf Greengrass-Core-Geräten verwalten.
Anforderung
Die Anfrage dieser Operation hat die folgenden Parameter:
topicName(Python:topic_name)-
Das Thema, zu dem die Nachricht veröffentlicht werden soll.
qos-
Das zu verwendende MQTT-QoS. Diese Aufzählung,
QOS, hat die folgenden Werte:-
AT_MOST_ONCE— QoS 0. Die MQTT-Nachricht wird höchstens einmal zugestellt. -
AT_LEAST_ONCE— QoS 1. Die MQTT-Nachricht wird mindestens einmal zugestellt.
-
payload-
(Optional) Die Nachrichtennutzlast als Blob.
Die folgenden Funktionen sind für Version 2.10.0 und höher verfügbar, Grüngras-Kern wenn MQTT 5 verwendet wird. Diese Funktionen werden ignoriert, wenn Sie MQTT 3.1.1 verwenden. In der folgenden Tabelle ist die Mindestversion des AWS IoT Geräte-SDK aufgeführt, die Sie für den Zugriff auf diese Funktionen verwenden müssen.
| SDK | Mindestversion |
|---|---|
| AWS IoT-Geräte-SDK for Python |
v1.15.0 |
| AWS IoT Device SDK for Java |
v1.13.0 |
| AWS IoT Device SDK for C++ |
v1.24.0 |
| AWS IoT Device SDK for JavaScript |
v1.13.0 |
payloadFormat-
(Optional) Das Format der Nachrichtennutzlast. Wenn Sie das nicht festlegen, wird davon ausgegangen
payloadFormat, dass es sichBYTESum einen Typ handelt. Die Aufzählung hat die folgenden Werte:-
BYTES— Der Inhalt der Nutzlast ist ein binärer Blob. -
UTF8— Der Inhalt der Payload ist eine UTF8-Zeichenfolge.
-
retain-
(Optional) Gibt an, ob die MQTT-Option „Beibehalten“ bei der Veröffentlichung auf gesetzt werden soll.
true userProperties-
(Optional) Eine Liste von anwendungsspezifischen
UserPropertyObjekten, die gesendet werden sollen. DasUserPropertyObjekt ist wie folgt definiert:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Optional) Die Anzahl der Sekunden, bevor die Nachricht abläuft und vom Server gelöscht wird. Wenn dieser Wert nicht festgelegt ist, läuft die Nachricht nicht ab.
correlationData-
(Optional) Der Anfrage hinzugefügte Informationen, anhand derer eine Anfrage einer Antwort zugeordnet werden kann.
responseTopic-
(Optional) Das Thema, das für die Antwortnachricht verwendet werden soll.
contentType-
(Optional) Ein anwendungsspezifischer Bezeichner des Inhaltstyps der Nachricht.
Antwort
Dieser Vorgang liefert in seiner Antwort keine Informationen.
Beispiele
Die folgenden Beispiele zeigen, wie dieser Vorgang in benutzerdefiniertem Komponentencode aufgerufen wird.
SubscribeToIoTCore
Abonnieren Sie MQTT-Nachrichten zu einem AWS IoT Core Thema oder Themenfilter. Die AWS IoT Greengrass Core-Software entfernt Abonnements, wenn die Komponente das Ende ihres Lebenszyklus erreicht.
Bei diesem Vorgang handelt es sich um einen Abonnementvorgang, bei dem Sie einen Stream von Ereignisnachrichten abonnieren. Um diesen Vorgang zu verwenden, definieren Sie einen Stream-Response-Handler mit Funktionen, die Ereignismeldungen, Fehler und das Schließen von Streams verarbeiten. Weitere Informationen finden Sie unter Abonnieren Sie IPC-Event-Streams.
Typ der Ereignisnachricht: IoTCoreMessage
Anforderung
Die Anfrage dieser Operation hat die folgenden Parameter:
topicName(Python:topic_name)-
Das Thema, das Sie abonnieren möchten. Sie können Platzhalter (
#und+) für MQTT-Themen verwenden, um mehrere Themen zu abonnieren. qos-
Das zu verwendende MQTT-QoS. Diese Aufzählung,
QOS, hat die folgenden Werte:-
AT_MOST_ONCE— QoS 0. Die MQTT-Nachricht wird höchstens einmal zugestellt. -
AT_LEAST_ONCE— QoS 1. Die MQTT-Nachricht wird mindestens einmal zugestellt.
-
Antwort
Die Antwort dieser Operation enthält die folgenden Informationen:
messages-
Der Stream der MQTT-Nachrichten. Dieses Objekt,
IoTCoreMessage, enthält die folgenden Informationen:message-
Die MQTT-Nachricht. Dieses Objekt,
MQTTMessage, enthält die folgenden Informationen:topicName(Python:topic_name)-
Das Thema, zu dem die Nachricht veröffentlicht wurde.
payload-
(Optional) Die Nachrichtennutzlast als Blob.
Die folgenden Funktionen sind für Version 2.10.0 und höher verfügbar, Grüngras-Kern wenn MQTT 5 verwendet wird. Diese Funktionen werden ignoriert, wenn Sie MQTT 3.1.1 verwenden. In der folgenden Tabelle ist die Mindestversion des AWS IoT Geräte-SDK aufgeführt, die Sie für den Zugriff auf diese Funktionen verwenden müssen.
SDK Mindestversion AWS IoT-Geräte-SDK for Python v2 v1.15.0 AWS IoT Device SDK for Java v2 v1.13.0 AWS IoT Device SDK for C++ v2 v1.24.0 AWS IoT Device SDK for JavaScript v2 v1.13.0 payloadFormat-
(Optional) Das Format der Nachrichtennutzlast. Wenn Sie das nicht angeben, wird davon ausgegangen
payloadFormat, dass es sichBYTESum einen Typ handelt. Die Aufzählung hat die folgenden Werte:-
BYTES— Der Inhalt der Nutzlast ist ein binärer Blob. -
UTF8— Der Inhalt der Payload ist eine UTF8-Zeichenfolge.
-
retain-
(Optional) Gibt an, ob die MQTT-Option „Beibehalten“ bei der Veröffentlichung auf gesetzt werden soll.
true userProperties-
(Optional) Eine Liste von anwendungsspezifischen
UserPropertyObjekten, die gesendet werden sollen. DasUserPropertyObjekt ist wie folgt definiert:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Optional) Die Anzahl der Sekunden, bevor die Nachricht abläuft und vom Server gelöscht wird. Wenn dieser Wert nicht festgelegt ist, läuft die Nachricht nicht ab.
correlationData-
(Optional) Der Anfrage hinzugefügte Informationen, anhand derer eine Anfrage einer Antwort zugeordnet werden kann.
responseTopic-
(Optional) Das Thema, das für die Antwortnachricht verwendet werden soll.
contentType-
(Optional) Eine anwendungsspezifische Kennung für den Inhaltstyp der Nachricht.
Beispiele
Die folgenden Beispiele zeigen, wie dieser Vorgang in benutzerdefiniertem Komponentencode aufgerufen wird.
SubscribeToIoTCoreConnectionStatus
Verwenden Sie diesen Vorgang, um den Status der MQTT-Verbindung zwischen dem Kerngerät und AWS IoT Core zu abonnieren. Nach dem Abonnieren erhalten Sie den aktuellen Verbindungsstatus als erstes Ereignis. Anschließend erhalten Sie jedes Mal ein Ereignis, wenn das Hauptgerät eine Verbindung herstellt oder die Verbindung trennt AWS IoT Core.
Bei diesem Vorgang handelt es sich um einen Abonnementvorgang, bei dem Sie einen Stream von Ereignisnachrichten abonnieren. Um diesen Vorgang zu verwenden, definieren Sie einen Stream-Response-Handler mit Funktionen, die Ereignismeldungen, Fehler und das Schließen von Streams verarbeiten. Weitere Informationen finden Sie unter Abonnieren Sie IPC-Event-Streams.
Typ der Ereignisnachricht: IoTCoreConnectionStatusEvent
Anmerkung
Für diesen Vorgang ist keine Autorisierungsrichtlinie erforderlich, da es sich um einen rein informativen, lokalen Vorgang handelt, der keine MQTT-Themendaten preisgibt. Sie können diesen Vorgang in Ihren Komponenten ohne einen accessControl Eintrag im Komponentenrezept aufrufen.
Anforderung
Die Anfrage dieser Operation hat keine Parameter.
Antwort
Die Antwort dieser Operation enthält die folgenden Informationen:
connectionStatusEvent(Python:connection_status_event)-
Das
ConnectionStatusEventObjekt in jedem StreamIoTCoreConnectionStatusEvent. Dieses Objekt meldet den MQTT-Verbindungsstatus des Kerngeräts und enthält die folgenden Informationen:status-
Der Status der MQTT-Verbindung zwischen dem Kerngerät und. AWS IoT Core Diese Aufzählung,
ConnectionStatus, hat die folgenden Werte:-
CONNECTED— Das Kerngerät ist angeschlossen an AWS IoT Core. -
DISCONNECTED— Das Kerngerät ist getrennt von AWS IoT Core.
-
Beispielereignisse
Jedes Ereignis im Stream ist die JSON-Serialisierung eines ObjektsIoTCoreConnectionStatusEvent. Der connectionStatusEvent Schlüssel identifiziert den Ereignistyp im Stream.
Nach dem Abonnieren erhalten Sie das folgende Beispielereignis, wenn das Hauptgerät mit verbunden ist AWS IoT Core. Sie erhalten dieses Ereignis auch, wenn die Verbindung wieder aufgenommen wird.
{ "connectionStatusEvent": { "status": "CONNECTED" } }
Sie erhalten das folgende Beispielereignis, wenn das Kerngerät seine MQTT-Verbindung verliert.
{ "connectionStatusEvent": { "status": "DISCONNECTED" } }
Beispiele
Anhand der folgenden Beispiele erfahren Sie, wie Sie den AWS IoT Core MQTT-IPC-Dienst in Ihren Komponenten verwenden.
Das folgende Beispielrezept ermöglicht es der Komponente, zu allen Themen zu veröffentlichen.
Das folgende Beispiel einer C++-Anwendung veranschaulicht, wie der AWS IoT Core MQTT-IPC-Dienst zum Veröffentlichen von Nachrichten verwendet wird. AWS IoT Core
#include <iostream> #include <aws/crt/Api.h> #include <aws/greengrass/GreengrassCoreIpcClient.h> using namespace Aws::Crt; using namespace Aws::Greengrass; class IpcClientLifecycleHandler : public ConnectionLifecycleHandler { void OnConnectCallback() override { std::cout << "OnConnectCallback" << std::endl; } void OnDisconnectCallback(RpcError error) override { std::cout << "OnDisconnectCallback: " << error.StatusToString() << std::endl; exit(-1); } bool OnErrorCallback(RpcError error) override { std::cout << "OnErrorCallback: " << error.StatusToString() << std::endl; return true; } }; int main() { String message("Hello from the Greengrass IPC MQTT publisher (C++)."); String topic("test/topic/cpp"); QOS qos = QOS_AT_LEAST_ONCE; int timeout = 10; ApiHandle apiHandle(g_allocator); Io::EventLoopGroup eventLoopGroup(1); Io::DefaultHostResolver socketResolver(eventLoopGroup, 64, 30); Io::ClientBootstrap bootstrap(eventLoopGroup, socketResolver); IpcClientLifecycleHandler ipcLifecycleHandler; GreengrassCoreIpcClient ipcClient(bootstrap); auto connectionStatus = ipcClient.Connect(ipcLifecycleHandler).get(); if (!connectionStatus) { std::cerr << "Failed to establish IPC connection: " << connectionStatus.StatusToString() << std::endl; exit(-1); } while (true) { PublishToIoTCoreRequest request; Vector<uint8_t> messageData({message.begin(), message.end()}); request.SetTopicName(topic); request.SetPayload(messageData); request.SetQos(qos); auto operation = ipcClient.NewPublishToIoTCore(); auto activate = operation->Activate(request, nullptr); activate.wait(); auto responseFuture = operation->GetResult(); if (responseFuture.wait_for(std::chrono::seconds(timeout)) == std::future_status::timeout) { std::cerr << "Operation timed out while waiting for response from Greengrass Core." << std::endl; exit(-1); } auto response = responseFuture.get(); if (response) { std::cout << "Successfully published to topic: " << topic << std::endl; } else { // An error occurred. std::cout << "Failed to publish to topic: " << topic << std::endl; auto errorType = response.GetResultType(); if (errorType == OPERATION_ERROR) { auto *error = response.GetOperationError(); std::cout << "Operation error: " << error->GetMessage().value() << std::endl; } else { std::cout << "RPC error: " << response.GetRpcError() << std::endl; } exit(-1); } std::this_thread::sleep_for(std::chrono::seconds(5)); } return 0; }
Das folgende Beispielrezept ermöglicht es der Komponente, alle Themen zu abonnieren.
Die folgende C++-Beispielanwendung zeigt, wie Sie den AWS IoT Core MQTT-IPC-Dienst verwenden, um Nachrichten von zu abonnieren. AWS IoT Core
#include <iostream> #include <aws/crt/Api.h> #include <aws/greengrass/GreengrassCoreIpcClient.h> using namespace Aws::Crt; using namespace Aws::Greengrass; class IoTCoreResponseHandler : public SubscribeToIoTCoreStreamHandler { public: virtual ~IoTCoreResponseHandler() {} private: void OnStreamEvent(IoTCoreMessage *response) override { auto message = response->GetMessage(); if (message.has_value() && message.value().GetPayload().has_value()) { auto messageBytes = message.value().GetPayload().value(); std::string messageString(messageBytes.begin(), messageBytes.end()); std::string messageTopic = message.value().GetTopicName().value().c_str(); std::cout << "Received new message on topic: " << messageTopic << std::endl; std::cout << "Message: " << messageString << std::endl; } } bool OnStreamError(OperationError *error) override { std::cout << "Received an operation error: "; if (error->GetMessage().has_value()) { std::cout << error->GetMessage().value(); } std::cout << std::endl; return false; // Return true to close stream, false to keep stream open. } void OnStreamClosed() override { std::cout << "Subscribe to IoT Core stream closed." << std::endl; } }; class IpcClientLifecycleHandler : public ConnectionLifecycleHandler { void OnConnectCallback() override { std::cout << "OnConnectCallback" << std::endl; } void OnDisconnectCallback(RpcError error) override { std::cout << "OnDisconnectCallback: " << error.StatusToString() << std::endl; exit(-1); } bool OnErrorCallback(RpcError error) override { std::cout << "OnErrorCallback: " << error.StatusToString() << std::endl; return true; } }; int main() { String topic("test/topic/cpp"); QOS qos = QOS_AT_LEAST_ONCE; int timeout = 10; ApiHandle apiHandle(g_allocator); Io::EventLoopGroup eventLoopGroup(1); Io::DefaultHostResolver socketResolver(eventLoopGroup, 64, 30); Io::ClientBootstrap bootstrap(eventLoopGroup, socketResolver); IpcClientLifecycleHandler ipcLifecycleHandler; GreengrassCoreIpcClient ipcClient(bootstrap); auto connectionStatus = ipcClient.Connect(ipcLifecycleHandler).get(); if (!connectionStatus) { std::cerr << "Failed to establish IPC connection: " << connectionStatus.StatusToString() << std::endl; exit(-1); } SubscribeToIoTCoreRequest request; request.SetTopicName(topic); request.SetQos(qos); auto streamHandler = MakeShared<IoTCoreResponseHandler>(DefaultAllocator()); auto operation = ipcClient.NewSubscribeToIoTCore(streamHandler); auto activate = operation->Activate(request, nullptr); activate.wait(); auto responseFuture = operation->GetResult(); if (responseFuture.wait_for(std::chrono::seconds(timeout)) == std::future_status::timeout) { std::cerr << "Operation timed out while waiting for response from Greengrass Core." << std::endl; exit(-1); } auto response = responseFuture.get(); if (response) { std::cout << "Successfully subscribed to topic: " << topic << std::endl; } else { // An error occurred. std::cout << "Failed to subscribe to topic: " << topic << std::endl; auto errorType = response.GetResultType(); if (errorType == OPERATION_ERROR) { auto *error = response.GetOperationError(); std::cout << "Operation error: " << error->GetMessage().value() << std::endl; } else { std::cout << "RPC error: " << response.GetRpcError() << std::endl; } exit(-1); } // Keep the main thread alive, or the process will exit. while (true) { std::this_thread::sleep_for(std::chrono::seconds(10)); } operation->Close(); return 0; }
Das folgende Beispielrezept ermöglicht es der Komponente, zu allen Themen zu veröffentlichen.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCorePublisherRust", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that publishes MQTT messages to IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCorePublisherRust:mqttproxy:1": { "policyDescription": "Allows access to publish to all topics.", "operations": ["aws.greengrass#PublishToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/publish_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCorePublisherRust/1.0.0/publish_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
Das folgende Beispiel für eine Rust-Anwendung zeigt, wie der AWS IoT Core MQTT-IPC-Dienst zum Veröffentlichen von Nachrichten verwendet wird. AWS IoT Core
use gg_sdk::{Qos, Sdk}; fn main() { let sdk = Sdk::init(); sdk.connect().expect("Failed to establish IPC connection"); let message = b"Hello, World"; let topic = "my/topic"; let qos = Qos::AtLeastOnce; sdk.publish_to_iot_core(topic, message, qos) .expect("Failed to publish to topic"); println!("Successfully published to topic: {topic}"); }
Das folgende Beispielrezept ermöglicht es der Komponente, alle Themen zu abonnieren.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCoreSubscriberRust", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that subscribes to MQTT messages from IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCoreSubscriberRust:mqttproxy:1": { "policyDescription": "Allows access to subscribe to all topics.", "operations": ["aws.greengrass#SubscribeToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/subscribe_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCoreSubscriberRust/1.0.0/subscribe_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
Das folgende Beispiel für eine Rust-Anwendung zeigt, wie Sie den AWS IoT Core MQTT-IPC-Dienst verwenden, um Nachrichten von zu abonnieren. AWS IoT Core
use gg_sdk::{Qos, Sdk}; use std::{thread, time::Duration}; fn main() { let sdk = Sdk::init(); sdk.connect().expect("Failed to establish IPC connection"); let topic = "my/topic"; let qos = Qos::AtLeastOnce; let callback = |topic: &str, payload: &[u8]| { let message = String::from_utf8_lossy(payload); println!("Received new message on topic {topic}: {message}"); }; let _sub = sdk .subscribe_to_iot_core(topic, qos, &callback) .expect("Failed to subscribe to topic"); println!("Successfully subscribed to topic: {topic}"); // Keep the main thread alive, or the process will exit. loop { thread::sleep(Duration::from_secs(10)); } }
Das folgende Beispielrezept ermöglicht es der Komponente, zu allen Themen zu veröffentlichen.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCorePublisherC", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that publishes MQTT messages to IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCorePublisherC:mqttproxy:1": { "policyDescription": "Allows access to publish to all topics.", "operations": ["aws.greengrass#PublishToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_publish_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCorePublisherC/1.0.0/sample_publish_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
Das folgende Beispiel einer C-Anwendung veranschaulicht, wie der AWS IoT Core MQTT-IPC-Dienst zum Veröffentlichen von Nachrichten verwendet wird. AWS IoT Core
#include <gg/error.h> #include <gg/ipc/client.h> #include <gg/sdk.h> #include <stdio.h> #include <stdlib.h> int main(void) { gg_sdk_init(); GgError err = ggipc_connect(); if (err != GG_ERR_OK) { fprintf(stderr, "Failed to establish IPC connection.\n"); exit(-1); } GgBuffer message = GG_STR("Hello, World"); GgBuffer topic = GG_STR("my/topic"); uint8_t qos = 1; err = ggipc_publish_to_iot_core(topic, message, qos); if (err != GG_ERR_OK) { fprintf( stderr, "Failed to publish to topic: %.*s\n", (int) topic.len, topic.data ); exit(-1); } printf( "Successfully published to topic: %.*s\n", (int) topic.len, topic.data ); }
Das folgende Beispielrezept ermöglicht es der Komponente, alle Themen zu abonnieren.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCoreSubscriberC", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that subscribes to MQTT messages from IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCoreSubscriberC:mqttproxy:1": { "policyDescription": "Allows access to subscribe to all topics.", "operations": ["aws.greengrass#SubscribeToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_subscribe_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCoreSubscriberC/1.0.0/sample_subscribe_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
Die folgende Beispielanwendung in C zeigt, wie Sie den AWS IoT Core MQTT-IPC-Dienst verwenden, um Nachrichten von zu abonnieren. AWS IoT Core
#include <gg/error.h> #include <gg/ipc/client.h> #include <gg/sdk.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> static void on_subscription_response( void *ctx, GgBuffer topic, GgBuffer payload, GgIpcSubscriptionHandle handle ) { (void) ctx; (void) handle; printf( "Received new message on topic %.*s: %.*s\n", (int) topic.len, topic.data, (int) payload.len, payload.data ); } int main(void) { gg_sdk_init(); GgError err = ggipc_connect(); if (err != GG_ERR_OK) { fprintf(stderr, "Failed to establish IPC connection.\n"); exit(-1); } GgBuffer topic = GG_STR("my/topic"); uint8_t qos = 1; GgIpcSubscriptionHandle handle; err = ggipc_subscribe_to_iot_core( topic, qos, on_subscription_response, NULL, &handle ); if (err != GG_ERR_OK) { fprintf( stderr, "Failed to subscribe to topic: %.*s\n", (int) topic.len, topic.data ); exit(-1); } printf( "Successfully subscribed to topic: %.*s\n", (int) topic.len, topic.data ); // Keep the main thread alive, or the process will exit. while (1) { sleep(10); } // To stop subscribing, close the subscription handle. ggipc_close_subscription(handle); }
Das folgende Beispielrezept ermöglicht es der Komponente, zu allen Themen zu veröffentlichen.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCorePublisherCpp", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that publishes MQTT messages to IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCorePublisherCpp:mqttproxy:1": { "policyDescription": "Allows access to publish to all topics.", "operations": ["aws.greengrass#PublishToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_cpp_publish_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCorePublisherCpp/1.0.0/sample_cpp_publish_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
Die folgende C++-Beispielanwendung zeigt, wie der AWS IoT Core MQTT-IPC-Dienst zum Veröffentlichen von Nachrichten verwendet wird. AWS IoT Core
#include <gg/ipc/client.hpp> #include <iostream> int main() { auto &client = gg::ipc::Client::get(); auto error = client.connect(); if (error) { std::cerr << "Failed to establish IPC connection.\n"; exit(-1); } std::string_view message = "Hello, World"; std::string_view topic = "my/topic"; uint8_t qos = 1; error = client.publish_to_iot_core(topic, message, qos); if (error) { std::cerr << "Failed to publish to topic: " << topic << "\n"; exit(-1); } std::cout << "Successfully published to topic: " << topic << "\n"; }
Das folgende Beispielrezept ermöglicht es der Komponente, alle Themen zu abonnieren.
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IoTCoreSubscriberCpp", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that subscribes to MQTT messages from IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.IoTCoreSubscriberCpp:mqttproxy:1": { "policyDescription": "Allows access to subscribe to all topics.", "operations": ["aws.greengrass#SubscribeToIoTCore"], "resources": ["*"] } } } } }, "Manifests": [ { "Platform": { "os": "linux", "runtime": "*" }, "Lifecycle": { "run": "{artifacts:path}/sample_cpp_subscribe_to_iot_core" }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.IoTCoreSubscriberCpp/1.0.0/sample_cpp_subscribe_to_iot_core", "Permission": { "Execute": "OWNER" } } ] } ] }
Die folgende C++-Beispielanwendung zeigt, wie Sie den AWS IoT Core MQTT-IPC-Dienst verwenden, um Nachrichten von zu abonnieren. AWS IoT Core
#include <gg/ipc/client.hpp> #include <unistd.h> #include <iostream> class ResponseHandler : public gg::ipc::IotTopicCallback { void operator()( std::string_view topic, gg::Buffer payload, gg::ipc::Subscription &handle ) override { (void) handle; std::cout << "Received new message on topic " << topic << ": " << payload << "\n"; } }; int main() { auto &client = gg::ipc::Client::get(); auto error = client.connect(); if (error) { std::cerr << "Failed to establish IPC connection.\n"; exit(-1); } std::string_view topic = "my/topic"; uint8_t qos = 1; static ResponseHandler handler; error = client.subscribe_to_iot_core(topic, qos, handler); if (error) { std::cerr << "Failed to subscribe to topic: " << topic << "\n"; exit(-1); } std::cout << "Successfully subscribed to topic: " << topic << "\n"; // Keep the main thread alive, or the process will exit. while (1) { sleep(10); } }