Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Publish/subscribe AWS IoT Core Messaggi MQTT
Il servizio IPC di messaggistica AWS IoT Core MQTT consente di inviare e ricevere messaggi MQTT da e verso. AWS IoT Core I componenti possono pubblicare messaggi AWS IoT Core e sottoscrivere argomenti per agire sui messaggi MQTT provenienti da altre fonti. Per ulteriori informazioni sull' AWS IoT Core implementazione di MQTT, vedere MQTT nella Developer https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html Guide. AWS IoT Core
Nota
Questo servizio IPC di messaggistica MQTT consente di scambiare messaggi con. AWS IoT Core Per ulteriori informazioni su come scambiare messaggi tra componenti, vedere. Pubblicare/sottoscrivere messaggi locali
Argomenti
Versioni minime dell'SDK
La tabella seguente elenca le versioni minime degli SDK che è possibile utilizzare per pubblicare e sottoscrivere messaggi MQTT da e verso. AWS IoT Core
| SDK | Versione minima |
|---|---|
|
v1.0.0 |
|
|
v1.2.10 |
|
|
v1.5.3 |
|
|
v1.17.0 |
|
|
v1.12.0 |
Autorizzazione
Per utilizzare la messaggistica AWS IoT Core MQTT in un componente personalizzato, è necessario definire politiche di autorizzazione che consentano al componente di inviare e ricevere messaggi su argomenti. Per informazioni sulla definizione delle politiche di autorizzazione, vedere. Autorizza i componenti a eseguire operazioni IPC
Le politiche di autorizzazione per la messaggistica AWS IoT Core MQTT hanno le seguenti proprietà.
Identificatore del servizio IPC: aws.greengrass.ipc.mqttproxy
| Operation | Description | Resources |
|---|---|---|
|
|
Consente a un componente di pubblicare messaggi AWS IoT Core sugli argomenti MQTT specificati. |
Una stringa di argomento, ad esempio |
|
|
Consente a un componente di sottoscrivere i messaggi relativi AWS IoT Core agli argomenti specificati. |
Una stringa di argomento, ad esempio |
|
|
Consente a un componente di pubblicare e sottoscrivere messaggi AWS IoT Core MQTT per gli argomenti specificati. |
Una stringa di argomento, ad esempio |
Wildcard MQTT in AWS IoT Core Politiche di autorizzazione MQTT
È possibile utilizzare le wildcard MQTT nelle AWS IoT Core politiche di autorizzazione IPC MQTT. I componenti possono pubblicare e sottoscrivere argomenti che corrispondono al filtro degli argomenti consentito in una politica di autorizzazione. Ad esempio, se la politica di autorizzazione di un componente concede l'accesso atest/topic/#, il componente può abbonarsitest/topic/#, pubblicare e sottoscriveretest/topic/filter.
Variabili di ricetta in AWS IoT Core Politiche di autorizzazione MQTT
Se si utilizza la versione 2.6.0 o successiva del nucleo Greengrass, è possibile utilizzare la variabile recipe nelle politiche di autorizzazione. {iot:thingName} Questa funzionalità consente di configurare una singola politica di autorizzazione per un gruppo di dispositivi principali, in cui ogni dispositivo principale può accedere solo agli argomenti che contengono il proprio nome. Ad esempio, puoi consentire a un componente di accedere alla seguente risorsa tematica.
devices/{iot:thingName}/messages
Per ulteriori informazioni, consulta Variabili di ricetta e Usa le variabili di ricetta negli aggiornamenti di fusione.
Esempi di politiche di autorizzazione
Puoi fare riferimento ai seguenti esempi di politiche di autorizzazione per aiutarti a configurare le politiche di autorizzazione per i tuoi componenti.
Esempio Esempio di politica di autorizzazione con accesso illimitato
Il seguente esempio di politica di autorizzazione consente a un componente di pubblicare e sottoscrivere tutti gli argomenti.
Esempio Esempio di politica di autorizzazione con accesso limitato
Il seguente esempio di politica di autorizzazione consente a un componente di pubblicare e sottoscrivere due argomenti denominati factory/1/events efactory/1/actions.
Esempio Esempio di politica di autorizzazione per un gruppo di dispositivi principali
Importante
Questo esempio utilizza una funzionalità disponibile per la versione 2.6.0 e successive del componente Greengrass nucleus. Greengrass nucleus v2.6.0 aggiunge il supporto per la maggior parte delle variabili di ricetta, ad esempio nelle configurazioni dei componenti. {iot:thingName}
Il seguente esempio di politica di autorizzazione consente a un componente di pubblicare e sottoscrivere un argomento che contiene il nome del dispositivo principale che esegue il componente.
PublishToIoTCore
Pubblica un messaggio MQTT AWS IoT Core su un argomento.
Quando si pubblicano messaggi MQTT su AWS IoT Core, è prevista una quota di 100 transazioni al secondo. Se si supera questa quota, i messaggi vengono messi in coda per l'elaborazione sul dispositivo Greengrass. È inoltre prevista una quota di 512 Kb di dati al secondo e una quota a livello di account di 20.000 pubblicazioni al secondo (2.000 in alcuni). Regioni AWS Per ulteriori informazioni sui limiti e le quote del broker di messaggi MQTT AWS IoT Core, vedi Limiti e quote del broker di AWS IoT Core messaggi e del protocollo.
Se superi queste quote, il dispositivo Greengrass limita la pubblicazione dei messaggi a. AWS IoT Core I messaggi vengono archiviati in uno spooler in memoria. Per impostazione predefinita, la memoria allocata allo spooler è 2,5 Mb. Se lo spooler si riempie, i nuovi messaggi vengono rifiutati. È possibile aumentare le dimensioni dello spooler. Per ulteriori informazioni, consulta Configurazione nella documentazione Nucleo di Greengrass. Per evitare di riempire lo spooler e di dover aumentare la memoria allocata, limitate le richieste di pubblicazione a non più di 100 richieste al secondo.
Quando l'applicazione deve inviare messaggi a una velocità più elevata o messaggi più grandi, valuta la possibilità di utilizzarlo Stream manager per inviare messaggi a Kinesis Data Streams. Il componente stream manager è progettato per trasferire dati ad alto volume verso. Cloud AWS Per ulteriori informazioni, consulta Gestisci i flussi di dati sui dispositivi principali di Greengrass.
Richiesta
La richiesta di questa operazione ha i seguenti parametri:
topicName(Python:topic_name)-
L'argomento su cui pubblicare il messaggio.
qos-
Il QoS MQTT da utilizzare. Questo enum,
QOS, ha i seguenti valori:-
AT_MOST_ONCE— QoS 0. Il messaggio MQTT viene recapitato al massimo una volta. -
AT_LEAST_ONCE— QoS 1. Il messaggio MQTT viene recapitato almeno una volta.
-
payload-
(Facoltativo) Il payload del messaggio è un blob.
Le seguenti funzionalità sono disponibili per la versione 2.10.0 e successive quando si utilizza MQTT 5. Nucleo di Greengrass Queste funzionalità vengono ignorate quando si utilizza MQTT 3.1.1. La tabella seguente elenca la versione minima dell'SDK del AWS IoT dispositivo che è necessario utilizzare per accedere a queste funzionalità.
| SDK | Versione minima |
|---|---|
| SDK per dispositivi AWS IoT per Python |
v1.15.0 |
| SDK per dispositivi AWS IoT per Java |
v1.13.0 |
| SDK per dispositivi AWS IoT per C++ |
v1.24.0 |
| SDK per dispositivi AWS IoT per JavaScript |
v1.13.0 |
payloadFormat-
(Facoltativo) Il formato del payload del messaggio. Se non si imposta il
payloadFormat, si presume che il tipo sia.BYTESL'enum ha i seguenti valori:-
BYTES— Il contenuto del payload è un blob binario. -
UTF8— Il contenuto del payload è una stringa di caratteri UTF8.
-
retain-
(Facoltativo) Indica se impostare l'opzione di conservazione MQTT su durante la pubblicazione.
true userProperties-
(Facoltativo) Un elenco di oggetti specifici dell'applicazione
UserPropertyda inviare. L'UserPropertyoggetto è definito come segue:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Facoltativo) Il numero di secondi prima che il messaggio scada e venga eliminato dal server. Se questo valore non è impostato, il messaggio non scade.
correlationData-
(Facoltativo) Informazioni aggiunte alla richiesta che possono essere utilizzate per associare una richiesta a una risposta.
responseTopic-
(Facoltativo) L'argomento da utilizzare per il messaggio di risposta.
contentType-
(Facoltativo) Un identificatore specifico dell'applicazione del tipo di contenuto del messaggio.
Risposta
Questa operazione non fornisce alcuna informazione nella risposta.
Esempi
Gli esempi seguenti mostrano come chiamare questa operazione nel codice del componente personalizzato.
SubscribeToIoTCore
Iscriviti ai messaggi MQTT provenienti da un AWS IoT Core argomento o da un filtro tematico. Il software AWS IoT Greengrass principale rimuove le sottoscrizioni quando il componente raggiunge la fine del suo ciclo di vita.
Questa operazione è un'operazione di sottoscrizione in cui ci si iscrive a un flusso di messaggi relativi agli eventi. Per utilizzare questa operazione, definisci un gestore di risposte allo stream con funzioni che gestiscono i messaggi di evento, gli errori e la chiusura dello stream. Per ulteriori informazioni, consulta Sottoscrivi ai flussi di eventi IPC.
Tipo di messaggio di evento: IoTCoreMessage
Richiesta
La richiesta di questa operazione ha i seguenti parametri:
topicName(Python:topic_name)-
L'argomento a cui iscriversi. È possibile utilizzare i caratteri jolly degli argomenti MQTT (
#e+) per sottoscrivere più argomenti. qos-
Il QoS MQTT da usare. Questo enum,
QOS, ha i seguenti valori:-
AT_MOST_ONCE— QoS 0. Il messaggio MQTT viene recapitato al massimo una volta. -
AT_LEAST_ONCE— QoS 1. Il messaggio MQTT viene recapitato almeno una volta.
-
Risposta
La risposta di questa operazione contiene le seguenti informazioni:
messages-
Il flusso di messaggi MQTT. Questo oggetto contiene
IoTCoreMessagele seguenti informazioni:message-
Il messaggio MQTT. Questo oggetto contiene
MQTTMessagele seguenti informazioni:topicName(Python:topic_name)-
L'argomento su cui è stato pubblicato il messaggio.
payload-
(Facoltativo) Il payload del messaggio come blob.
Le seguenti funzionalità sono disponibili per la versione 2.10.0 e successive quando si utilizza MQTT 5. Nucleo di Greengrass Queste funzionalità vengono ignorate quando si utilizza MQTT 3.1.1. La tabella seguente elenca la versione minima dell'SDK del AWS IoT dispositivo che è necessario utilizzare per accedere a queste funzionalità.
SDK Versione minima SDK per dispositivi AWS IoT per Python v2 v1.15.0 SDK per dispositivi AWS IoT per Java v2 v1.13.0 SDK per dispositivi AWS IoT per C++ v2 v1.24.0 SDK per dispositivi AWS IoT per JavaScript v2 v1.13.0 payloadFormat-
(Facoltativo) Il formato del payload del messaggio. Se non si imposta il
payloadFormat, si presume che il tipo sia.BYTESL'enum ha i seguenti valori:-
BYTES— Il contenuto del payload è un blob binario. -
UTF8— Il contenuto del payload è una stringa di caratteri UTF8.
-
retain-
(Facoltativo) Indica se impostare l'opzione di conservazione MQTT su durante la pubblicazione.
true userProperties-
(Facoltativo) Un elenco di oggetti specifici dell'applicazione
UserPropertyda inviare. L'UserPropertyoggetto è definito come segue:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Facoltativo) Il numero di secondi prima che il messaggio scada e venga eliminato dal server. Se questo valore non è impostato, il messaggio non scade.
correlationData-
(Facoltativo) Informazioni aggiunte alla richiesta che possono essere utilizzate per associare una richiesta a una risposta.
responseTopic-
(Facoltativo) L'argomento da utilizzare per il messaggio di risposta.
contentType-
(Facoltativo) Un identificatore specifico dell'applicazione del tipo di contenuto del messaggio.
Esempi
Gli esempi seguenti mostrano come chiamare questa operazione nel codice del componente personalizzato.
SubscribeToIoTCoreConnectionStatus
Usa questa operazione per registrare lo stato della connessione MQTT tra il dispositivo principale e. AWS IoT Core Dopo la sottoscrizione, riceverai lo stato attuale della connessione come primo evento. Quindi, ricevi un evento ogni volta che il dispositivo principale si connette o si disconnette. AWS IoT Core
Questa operazione è un'operazione di sottoscrizione in cui ci si iscrive a un flusso di messaggi relativi agli eventi. Per utilizzare questa operazione, definisci un gestore di risposte allo stream con funzioni che gestiscono i messaggi di evento, gli errori e la chiusura dello stream. Per ulteriori informazioni, consulta Sottoscrivi ai flussi di eventi IPC.
Tipo di messaggio di evento: IoTCoreConnectionStatusEvent
Nota
Questa operazione non richiede una policy di autorizzazione, perché è un'operazione informativa, solo locale, che non espone i dati degli argomenti MQTT. È possibile chiamare questa operazione nei componenti senza inserire alcuna voce nella ricetta del componenteaccessControl.
Richiesta
La richiesta di questa operazione non contiene parametri.
Risposta
La risposta di questa operazione contiene le seguenti informazioni:
connectionStatusEvent(Python:connection_status_event)-
L'
ConnectionStatusEventoggetto in ogni streamingIoTCoreConnectionStatusEvent. Questo oggetto riporta lo stato di connessione MQTT del dispositivo principale e contiene le seguenti informazioni:status-
Lo stato della connessione MQTT tra il dispositivo principale e. AWS IoT Core Questo enum,
ConnectionStatus, ha i seguenti valori:-
CONNECTED— Il dispositivo principale è collegato a. AWS IoT Core -
DISCONNECTED— Il dispositivo principale è disconnesso da AWS IoT Core.
-
Eventi di esempio
Ogni evento nello stream è la serializzazione JSON di un oggetto. IoTCoreConnectionStatusEvent La connectionStatusEvent chiave identifica il tipo di evento nello stream.
Dopo la sottoscrizione, riceverai il seguente evento di esempio quando il dispositivo principale è connesso a AWS IoT Core. Riceverai questo evento anche quando la connessione riprende.
{ "connectionStatusEvent": { "status": "CONNECTED" } }
Si riceve il seguente evento di esempio quando il dispositivo principale perde la connessione MQTT.
{ "connectionStatusEvent": { "status": "DISCONNECTED" } }
Esempi
Usa i seguenti esempi per imparare a usare il servizio IPC AWS IoT Core MQTT nei tuoi componenti.
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
L'esempio seguente di applicazione C++ dimostra come utilizzare il servizio IPC AWS IoT Core MQTT su cui pubblicare messaggi. 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; }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
L'esempio seguente di applicazione C++ dimostra come utilizzare il servizio IPC AWS IoT Core MQTT per sottoscrivere messaggi da. 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; }
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
{ "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" } } ] } ] }
L'esempio seguente di applicazione Rust dimostra come utilizzare il servizio IPC AWS IoT Core MQTT su cui pubblicare messaggi. 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}"); }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
{ "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" } } ] } ] }
L'esempio seguente: l'applicazione Rust dimostra come utilizzare il servizio IPC AWS IoT Core MQTT per sottoscrivere messaggi da. 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)); } }
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
{ "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" } } ] } ] }
Il seguente esempio di applicazione C dimostra come utilizzare il servizio IPC AWS IoT Core MQTT per pubblicare messaggi su. 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 ); }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
{ "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" } } ] } ] }
Il seguente esempio di applicazione C dimostra come utilizzare il servizio IPC AWS IoT Core MQTT per sottoscrivere messaggi da. 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); }
La seguente ricetta di esempio consente al componente di pubblicare su tutti gli argomenti.
{ "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" } } ] } ] }
L'esempio seguente di applicazione C++ dimostra come utilizzare il servizio IPC AWS IoT Core MQTT su cui pubblicare messaggi. 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"; }
La seguente ricetta di esempio consente al componente di sottoscrivere tutti gli argomenti.
{ "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" } } ] } ] }
L'esempio seguente di applicazione C++ dimostra come utilizzare il servizio IPC AWS IoT Core MQTT per sottoscrivere messaggi da. 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); } }