Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengelompokkan pesan tindakan HTTP
Anda dapat menggunakan batching untuk mengirim beberapa pesan tindakan HTTP dalam satu permintaan.
Gambaran umum
Batching memungkinkan Anda mengirim pesan dari AWS IoT Core Rules Engine ke endpoint HTTP Anda dalam batch. Fungsionalitas ini dapat membantu mengurangi biaya Anda dengan menurunkan jumlah eksekusi tindakan HTTP serta meningkatkan efisiensi dengan mengurangi overhead yang terkait dengan membangun koneksi baru.
catatan
Tindakan HTTP batch diukur sebagai tindakan tunggal. Anda diukur dengan penambahan 5 KiB, berdasarkan ukuran payload batch keluar yang dipancarkan oleh Rules Engine ke layanan hilir. AWS IoT Core Untuk informasi lebih lanjut, lihat halaman harga AWS IoT Core
Saat Anda mengaktifkan batching dalam definisi Tindakan Aturan IoT Anda, parameter berikut akan tersedia untuk konfigurasi:
maxBatchOpenMs-
Jumlah waktu maksimum (dalam milidetik) pesan keluar menunggu pesan lain untuk membuat batch. Semakin tinggi pengaturan, semakin lama latensi tindakan HTTP batch.
Nilai Minimum: 5 ms. Nilai Maksimum: 200 ms.
Nilai Default: 20 ms
Mendukung template substitusi: Tidak
maxBatchSize-
Jumlah maksimum pesan yang dikumpulkan bersama dalam satu eksekusi tindakan aturan IoT.
Nilai Minimum: 2 pesan. Nilai Maksimum: 10 pesan
Nilai Default: 10 pesan
Mendukung template substitusi: Tidak
maxBatchSizeBytes-
Ukuran maksimum kumpulan pesan, dalam byte.
Nilai Minimum: 100 byte. Nilai Maksimum: 131.072 byte
Nilai Default: 5120 byte
Mendukung template substitusi: Tidak
penting
Saat Anda menentukan beberapa parameter batch, batching selesai saat batas pertama tercapai. Misalnya, jika Anda menentukan 100 ms sebagai Waktu Buka Batch Maksimum dan 5 KiB sebagai Ukuran Batch Maksimum, dan Batch Rules Engine hanya 2 KiB dalam 100 ms, maka batch 2 KiB akan dibuat dan dikirim.
Menggunakan header HTTP dalam batch
Saat Anda menggunakan header dalam tindakan HTTP Anda, permintaan batch menggunakan nilai header dari pesan terakhir yang ditambahkan ke batch (belum tentu pesan terakhir yang Anda terbitkan). Kami merekomendasikan menggunakan nilai header yang:
-
Identik di semua pesan dalam batch
-
Berlaku untuk semua pesan (misalnya, kredensyal otentikasi)
Header dikirim dengan permintaan HTTP dan bukan bagian dari badan pesan.
catatan
Saat batching diaktifkan:
Permintaan batch secara otomatis menyertakan
Content-Type: application/jsonheader, karena batch dikirim sebagai array JSON.Kami tidak dapat menjamin bahwa pesan terakhir dalam batch adalah pesan terakhir yang Anda terbitkan. Ini adalah pesan terakhir yang berhasil masuk ke dalam batch.
Contoh Muatan
Contoh berikut menunjukkan struktur payload pesan batch yang dikirim ke titik akhir HTTP Anda:
[ { "user_id": "user1", "steps_today": 1000 }, { "user_id": "user2", "steps_today": 21000 }, { "user_id": "user8", "steps_today": 1500 }, ... ]
Batasan
Berikut ini adalah batasan batching:
AWS IoT Coretidak menjamin pemesanan pesan secara keseluruhan. Batching dilakukan secara lokal pada setiap host, yang dapat mengakibatkan pesan dalam batch diproses dalam urutan yang berbeda dari yang diterima.
AWS IoT Coretidak menyediakan dukungan pemrosesan pesan di sisi penerima. Anda bertanggung jawab untuk memastikan bahwa layanan hilir Anda dikonfigurasi untuk menerima dan memproses data dalam batch.
Batching lintas akun tidak didukung, bahkan jika pesan ditujukan untuk pengenal sumber daya yang sama (URL HTTP atau ARN sumber daya).
AWS IoT Coretidak menjamin bahwa ukuran batch akan memenuhi konfigurasi yang Anda tentukan. Batch mungkin lebih kecil dari batas yang dikonfigurasi berdasarkan waktu dan alur pesan.
Saat batching diaktifkan, muatan biner (data non-UTF-8) tidak didukung. Hanya muatan teks UTF-8 (seperti JSON) yang diterima. Untuk mengirim data biner, base64 menyandikannya sebelum mengirimnya ke aksi HTTP, dan kemudian mendekodekannya di titik akhir penerima Anda. Misalnya, Anda dapat menggunakan fungsi encode dalam aturan IoT untuk menyandikan payload biner. Atau, Anda dapat menyandikan payload biner di perangkat IoT Anda dan mempublikasikannya ke. AWS IoT Core
Tindakan Kesalahan untuk Batching
Anda tidak akan dapat mendefinisikan logika batching terpisah dalam definisi Tindakan Kesalahan Anda. Namun, Error Action Anda akan mendukung batching jika Anda telah menentukan logika batching di Action utama Anda.
Ketika permintaan batch gagal, mesin AWS IoT Core Rules akan mengikuti logika coba lagi tindakan HTTP. Setelah percobaan ulang terakhir, tindakan kesalahan akan dipanggil untuk setiap pesan individual.
Berikut ini adalah contoh pesan tindakan kesalahan dengan batching diaktifkan:
{ "ruleName": "FailedTopicRule", "topic": "topic/rulesengine", "payloadsWithMetadata": [ { "id": 1, "cloudwatchTraceId": "bebd6d93-6d4a-899e-9e40-56e82252d2be", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" }, { "id": 2, "cloudwatchTraceId": "af94d3b8-0b18-1dbf-2c7d-513f5cb9e2e1", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" }, { "id": 3, "cloudwatchTraceId": "ca441266-c2ce-c916-6aee-b9e5c7831675", "clientId": "Test", "sourceIp": "10.0.0.0", "base64OriginalPayload": "eyJ1c2VyX2lkIjogInVzZXI1NjQ3IiwgInN0ZXBzX3RvZGF5IjogMTMzNjUsICJ0aW1lc3RhbXAiOiAiMjAyNS0xMC0wOVQwNzoyMjo1OC45ODQ3OTAxNzZaIn0=" } ], "failures": [ { "affectedIds": [ 1, 2, 3 ], "failedAction": "HttpAction", "failedResource": "https://example.foobar.com/HttpAction", "errorMessage": "HttpAction failed to make a request to the specified endpoint. StatusCode: 500. Reason: Internal Server Error." }, { "affectedIds": [ 3 ], "failedAction": "S3Action", "failedResource": "amzn-s3-demo-bucket", "errorMessage": "Failed to put S3 object. The error received was The specified bucket does not exist" }, { "affectedIds": [ 3 ], "failedAction": "LambdaAction", "failedResource": "arn:aws:lambda:us-west-2:123456789012:function:dummy", "errorMessage": "Failed to invoke lambda function. Received Server error from Lambda. The error code is 403" } ] }
catatan
Kegagalan tindakan batch juga menghasilkan muatan tindakan kesalahan yang lebih besar yang dapat meningkatkan kemungkinan kegagalan tindakan kesalahan karena ukurannya. Anda dapat memantau kegagalan tindakan kesalahan menggunakan ErrorActionFailure metrik. Untuk informasi selengkapnya, lihat Metrik tindakan aturan.
Mengelompokkan pesan tindakan HTTP dengan AWS CLI
Membuat atau memperbarui tindakan aturan dengan batching
-
Gunakan AWS CLI perintah yang sesuai untuk membuat atau memperbarui aturan:
-
Untuk membuat aturan baru, gunakan create-topic-ruleperintah:
aws iot create-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json -
Untuk memperbarui aturan yang ada, gunakan replace-topic-ruleperintah:
aws iot replace-topic-rule --rule-namemyrule--topic-rule-payload file://myrule.json
-
-
Aktifkan kemampuan batching dengan menyetel parameter enableBatching ke true di payload aturan topik Anda:
{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "http": { "url": "https://www.example.com/subpath", "confirmationUrl": "https://www.example.com", "headers": [ { "key": "static_header_key", "value": "static_header_value" }, { "key": "substitutable_header_key", "value": "${value_from_payload}" } ], "enableBatching": true, "batchConfig": { "maxBatchOpenMs":100, "maxBatchSize":5, "maxBatchSizeBytes":1024} } } ] } -
Konfigurasikan parameter batching. Anda tidak perlu menentukan semua parameter batch. Anda dapat memilih untuk menentukan 1, 2, atau semua 3 parameter batch. Jika Anda tidak menentukan parameter batch, Rules Engine akan memperbarui parameter itu dengan nilai default. Untuk informasi selengkapnya tentang parameter batching dan nilai defaultnya, lihat parameter HTTP.