Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Publish/subscribe AWS IoT Core Pesan MQTT
Layanan IPC pesan AWS IoT Core MQTT memungkinkan Anda mengirim dan menerima pesan MQTT ke dan dari. AWS IoT Core Komponen dapat mempublikasikan pesan ke AWS IoT Core dan berlangganan topik untuk bertindak berdasarkan pesan MQTT dari sumber lain. Untuk informasi lebih lanjut tentang AWS IoT Core implementasi MQTT, lihat MQTT di Panduan Peng AWS IoT Core embang.
catatan
Layanan IPC perpesanan MQTT ini memungkinkan Anda bertukar pesan dengan. AWS IoT Core Untuk informasi selengkapnya tentang cara bertukar pesan antar komponen, lihat Pesan lokal publikasi/berlangganan.
Topik
SDK (Versi Minimum)
Tabel berikut mencantumkan versi minimum SDK yang dapat Anda gunakan untuk menerbitkan dan berlangganan pesan MQTT ke dan dari. AWS IoT Core
| SDK | Versi minimum |
|---|---|
|
v1.0.0 |
|
|
v1.2.10 |
|
|
v1.5.3 |
|
|
v1.17.0 |
|
|
v1.12.0 |
Otorisasi
Untuk menggunakan pesan AWS IoT Core MQTT dalam komponen khusus, Anda harus menentukan kebijakan otorisasi yang memungkinkan komponen Anda mengirim dan menerima pesan pada topik. Untuk informasi tentang cara menentukan kebijakan otorisasi, lihat Otorisasi komponen untuk melakukan operasi IPC.
Kebijakan otorisasi untuk pesan AWS IoT Core MQTT memiliki properti berikut.
Pengenal layanan IPC: aws.greengrass.ipc.mqttproxy
| Operasi | Deskripsi | Sumber daya |
|---|---|---|
|
|
Memungkinkan komponen untuk menerbitkan pesan AWS IoT Core pada topik MQTT yang Anda tentukan. |
Topik string, seperti |
|
|
Mengizinkan komponen untuk berlangganan pesan dari AWS IoT Core topik yang Anda tentukan. |
Topik string, seperti |
|
|
Memungkinkan komponen untuk menerbitkan dan berlangganan pesan AWS IoT Core MQTT untuk topik yang Anda tentukan. |
Topik string, seperti |
Karakter pengganti MQTT di AWS IoT Core Kebijakan otorisasi MQTT
Anda dapat menggunakan wildcard MQTT dalam kebijakan otorisasi IP AWS IoT Core C MQTT. Komponen dapat mempublikasikan dan berlangganan topik yang cocok dengan filter topik yang Anda izinkan dalam kebijakan otorisasi. Misalnya, jika kebijakan otorisasi komponen memberikan akses ketest/topic/#, komponen dapat berlangganantest/topic/#, dan dapat mempublikasikan dan berlangganantest/topic/filter.
Variabel resep di AWS IoT Core Kebijakan otorisasi MQTT
Jika Anda menggunakan v2.6.0 atau yang lebih baru dari inti Greengrass, Anda dapat menggunakan variabel {iot:thingName} resep dalam kebijakan otorisasi. Fitur ini memungkinkan Anda mengonfigurasi kebijakan otorisasi tunggal untuk sekelompok perangkat inti, di mana setiap perangkat inti hanya dapat mengakses topik yang berisi namanya sendiri. Misalnya, Anda dapat mengizinkan akses komponen ke sumber daya topik berikut.
devices/{iot:thingName}/messages
Untuk informasi selengkapnya, lihat Variabel resep dan Gunakan variabel resep dalam menggabungkan pembaruan.
Contoh kebijakan otorisasi
Anda dapat mereferensikan contoh kebijakan otorisasi berikut untuk membantu Anda mengonfigurasi kebijakan otorisasi untuk komponen Anda.
contoh Contoh kebijakan otorisasi dengan akses tidak terbatas
Kebijakan otorisasi contoh berikut ini memungkinkan komponen untuk mempublikasikan dan berlangganan semua topik.
contoh Contoh kebijakan otorisasi dengan akses terbatas
Contoh kebijakan otorisasi berikut memungkinkan komponen untuk menerbitkan dan berlangganan dua topik bernama factory/1/events danfactory/1/actions.
contoh Contoh kebijakan otorisasi untuk sekelompok perangkat inti
penting
Contoh ini menggunakan fitur yang tersedia untuk v2.6.0 dan yang lebih baru dari komponen inti Greengrass. Greengrass nucleus v2.6.0 menambahkan dukungan untuk sebagian besar variabel resep, seperti{iot:thingName}, dalam konfigurasi komponen.
Contoh kebijakan otorisasi berikut memungkinkan komponen untuk menerbitkan dan berlangganan topik yang berisi nama perangkat inti yang menjalankan komponen.
PublishToIoTCore
Menerbitkan pesan MQTT AWS IoT Core pada suatu topik.
Saat Anda mempublikasikan pesan MQTT ke AWS IoT Core, ada kuota 100 transaksi per detik. Jika Anda melebihi kuota ini, pesan akan diantri untuk diproses di perangkat Greengrass. Ada juga kuota 512 Kb data per detik dan kuota seluruh akun 20.000 penerbitan per detik (2.000 di beberapa Wilayah AWS). Untuk informasi selengkapnya tentang batas broker pesan MQTT di AWS IoT Core, lihat batas dan kuota broker AWS IoT Core pesan dan protokol.
Jika Anda melebihi kuota ini, perangkat Greengrass membatasi penerbitan pesan ke AWS IoT Core. Pesan disimpan dalam spooler dalam memori. Secara default, memori yang dialokasikan ke spooler adalah 2, 5 Mb. Jika spooler terisi, pesan baru ditolak. Anda dapat meningkatkan ukuran spooler. Untuk informasi lebih lanjut, lihat Konfigurasi dalam Inti Greengrass dokumentasi. Untuk menghindari mengisi spooler dan perlu menambah memori yang dialokasikan, batasi permintaan publikasi hingga tidak lebih dari 100 permintaan per detik.
Saat aplikasi Anda perlu mengirim pesan dengan kecepatan yang lebih tinggi, atau pesan yang lebih besar, pertimbangkan untuk menggunakan Manajer pengaliran untuk mengirim pesan ke Kinesis Data Streams. Komponen pengelola aliran dirancang untuk mentransfer data volume tinggi ke AWS Cloud. Untuk informasi selengkapnya, lihat Kelola aliran data di perangkat inti Greengrass.
Permintaan
Permintaan operasi ini memiliki parameter berikut:
topicName(Python:topic_name)-
Topik untuk mempublikasikan pesan.
qos-
QoS MQTT yang akan digunakan. Enum ini,
QOS, memiliki nilai-nilai berikut:-
AT_MOST_ONCE– QoS 0. Pesan MQTT dikirim paling banyak sekali. -
AT_LEAST_ONCE– QoS 1. Pesan MQTT dikirim paling sedikit sekali.
-
payload-
(Opsional) Pesan muatan sebagai gumpalan.
Fitur-fitur berikut tersedia untuk v2.10.0 dan yang lebih baru Inti Greengrass saat menggunakan MQTT 5. Fitur-fitur ini diabaikan saat Anda menggunakan MQTT 3.1.1. Tabel berikut mencantumkan versi minimum SDK AWS IoT perangkat yang harus Anda gunakan untuk mengakses fitur-fitur ini.
| SDK | Versi minimum |
|---|---|
| AWS IoT Device 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-
(Opsional) Format payload pesan. Jika Anda tidak menyetel
payloadFormat, tipenya diasumsikan sebagaiBYTES. Enum memiliki nilai-nilai berikut:-
BYTES— Isi payload adalah gumpalan biner. -
UTF8— Isi payload adalah string karakter UTF8.
-
retain-
(Opsional) Menunjukkan apakah akan mengatur opsi MQTT mempertahankan
truesaat menerbitkan. userProperties-
(Opsional) Daftar
UserPropertyobjek khusus aplikasi untuk dikirim. ObUserPropertyjek didefinisikan sebagai berikut:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Opsional) Jumlah detik sebelum pesan kedaluwarsa dan dihapus oleh server. Jika nilai ini tidak disetel, pesan tidak kedaluwarsa.
correlationData-
(Opsional) Informasi ditambahkan ke permintaan yang dapat digunakan untuk mengaitkan permintaan dengan respons.
responseTopic-
(Opsional) Topik yang harus digunakan untuk pesan respons.
contentType-
(Opsional) Pengidentifikasi khusus aplikasi dari jenis konten pesan.
Respons
Operasi ini tidak memberikan informasi apa pun dalam tanggapannya.
Contoh
Contoh-contoh berikut ini menunjukkan cara memanggil operasi ini dalam kode komponen kustom.
SubscribeToIoTCore
Berlangganan pesan MQTT dari AWS IoT Core topik atau filter topik. Perangkat lunak AWS IoT Greengrass Core menghapus langganan ketika komponen mencapai akhir siklus hidupnya.
Operasi ini adalah operasi berlangganan di mana Anda berlangganan aliran pesan peristiwa. Untuk menggunakan operasi ini, tentukan bagian yang menangani respons aliran dengan fungsi yang menangani pesan peristiwa, kesalahan, dan penutupan aliran. Untuk informasi selengkapnya, lihat Berlangganan pengaliran peristiwa IPC.
Jenis pesan peristiwa: IoTCoreMessage
Permintaan
Permintaan operasi ini memiliki parameter berikut:
topicName(Python:topic_name)-
Topik yang harus dijadikan langganan. Anda dapat menggunakan wildcard topik MQTT (
#dan+) untuk berlangganan beberapa topik. qos-
QoS MQTT yang akan digunakan. Enum ini,
QOS, memiliki nilai-nilai berikut:-
AT_MOST_ONCE– QoS 0. Pesan MQTT dikirim paling banyak sekali. -
AT_LEAST_ONCE– QoS 1. Pesan MQTT dikirim paling sedikit sekali.
-
Respons
Tanggapan operasi ini memiliki informasi berikut:
messages-
Aliran pesan MQTT. Objek ini,
IoTCoreMessage, berisi informasi berikut:message-
Pesan MQTT. Objek ini,
MQTTMessage, berisi informasi berikut:topicName(Python:topic_name)-
Topik yang pesannya dipublikasikan.
payload-
(Opsional) Pesan muatan sebagai gumpalan.
Fitur-fitur berikut tersedia untuk v2.10.0 dan yang lebih baru Inti Greengrass saat menggunakan MQTT 5. Fitur-fitur ini diabaikan saat Anda menggunakan MQTT 3.1.1. Tabel berikut mencantumkan versi minimum SDK AWS IoT perangkat yang harus Anda gunakan untuk mengakses fitur-fitur ini.
SDK Versi minimum AWS IoT Device 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-
(Opsional) Format payload pesan. Jika Anda tidak menyetel
payloadFormat, tipenya diasumsikan sebagaiBYTES. Enum memiliki nilai-nilai berikut:-
BYTES— Isi payload adalah gumpalan biner. -
UTF8— Isi payload adalah string karakter UTF8.
-
retain-
(Opsional) Menunjukkan apakah akan mengatur opsi MQTT mempertahankan
truesaat menerbitkan. userProperties-
(Opsional) Daftar
UserPropertyobjek khusus aplikasi untuk dikirim. ObUserPropertyjek didefinisikan sebagai berikut:UserProperty: key: string value: string messageExpiryIntervalSeconds-
(Opsional) Jumlah detik sebelum pesan kedaluwarsa dan dihapus oleh server. Jika nilai ini tidak disetel, pesan tidak kedaluwarsa.
correlationData-
(Opsional) Informasi ditambahkan ke permintaan yang dapat digunakan untuk mengaitkan permintaan dengan respons.
responseTopic-
(Opsional) Topik yang harus digunakan untuk pesan respons.
contentType-
(Opsional) Pengidentifikasi khusus aplikasi dari jenis konten pesan.
Contoh
Contoh-contoh berikut ini menunjukkan cara memanggil operasi ini dalam kode komponen kustom.
SubscribeToIoTCoreConnectionStatus
Gunakan operasi ini untuk berlangganan status koneksi MQTT antara perangkat inti dan AWS IoT Core. Setelah berlangganan, Anda menerima status koneksi saat ini sebagai acara pertama. Kemudian, Anda menerima acara setiap kali perangkat inti terhubung ke atau terputus dari AWS IoT Core.
Operasi ini adalah operasi berlangganan di mana Anda berlangganan aliran pesan peristiwa. Untuk menggunakan operasi ini, tentukan bagian yang menangani respons aliran dengan fungsi yang menangani pesan peristiwa, kesalahan, dan penutupan aliran. Untuk informasi selengkapnya, lihat Berlangganan pengaliran peristiwa IPC.
Jenis pesan peristiwa: IoTCoreConnectionStatusEvent
catatan
Operasi ini tidak memerlukan kebijakan otorisasi, karena ini adalah operasi informasi, khusus lokal yang tidak mengekspos data topik MQTT. Anda dapat memanggil operasi ini di komponen Anda tanpa accessControl entri dalam resep komponen.
Permintaan
Operasi ini tidak memiliki parameter apa pun.
Respons
Tanggapan operasi ini memiliki informasi berikut:
connectionStatusEvent(Python:connection_status_event)-
Ob
ConnectionStatusEventjek di masing-masing dialirkan.IoTCoreConnectionStatusEventObjek ini melaporkan status koneksi MQTT dari perangkat inti, dan berisi informasi berikut:status-
Status koneksi MQTT antara perangkat inti dan AWS IoT Core. Enum ini,
ConnectionStatus, memiliki nilai-nilai berikut:-
CONNECTED— Perangkat inti terhubung ke AWS IoT Core. -
DISCONNECTED— Perangkat inti terputus dari AWS IoT Core.
-
Contoh acara
Setiap peristiwa dalam aliran adalah serialisasi JSON dari suatu IoTCoreConnectionStatusEvent objek. K connectionStatusEvent unci mengidentifikasi jenis peristiwa dalam aliran.
Setelah Anda berlangganan, Anda menerima contoh peristiwa berikut ketika perangkat inti terhubung ke AWS IoT Core. Anda juga menerima acara ini ketika koneksi dilanjutkan.
{ "connectionStatusEvent": { "status": "CONNECTED" } }
Anda menerima contoh peristiwa berikut ketika perangkat inti kehilangan koneksi MQTT-nya.
{ "connectionStatusEvent": { "status": "DISCONNECTED" } }
Contoh
Gunakan contoh berikut untuk mempelajari cara menggunakan layanan AWS IoT Core MQTT IPC di komponen Anda.
Contoh resep berikut memungkinkan komponen untuk mempublikasikan ke semua topik.
Contoh berikut aplikasi C++ menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk mempublikasikan pesan ke. 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; }
Contoh resep berikut memungkinkan komponen untuk berlangganan semua topik.
Contoh berikut aplikasi C++ menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk berlangganan pesan dari. 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; }
Contoh resep berikut memungkinkan komponen untuk mempublikasikan ke semua topik.
{ "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" } } ] } ] }
Contoh berikut aplikasi Rust menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk mempublikasikan pesan ke. 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}"); }
Contoh resep berikut memungkinkan komponen untuk berlangganan semua topik.
{ "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" } } ] } ] }
Contoh berikut aplikasi Rust menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk berlangganan pesan dari. 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)); } }
Contoh resep berikut memungkinkan komponen untuk mempublikasikan ke semua topik.
{ "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" } } ] } ] }
Contoh berikut aplikasi C menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk mempublikasikan pesan ke. 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 ); }
Contoh resep berikut memungkinkan komponen untuk berlangganan semua topik.
{ "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" } } ] } ] }
Contoh berikut aplikasi C menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk berlangganan pesan dari. 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); }
Contoh resep berikut memungkinkan komponen untuk mempublikasikan ke semua topik.
{ "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" } } ] } ] }
Contoh berikut aplikasi C++ menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk mempublikasikan pesan ke. 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"; }
Contoh resep berikut memungkinkan komponen untuk berlangganan semua topik.
{ "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" } } ] } ] }
Contoh berikut aplikasi C++ menunjukkan cara menggunakan layanan AWS IoT Core MQTT IPC untuk berlangganan pesan dari. 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); } }