Namespace Layanan Azure Event Grid - dukungan untuk skema CloudEvents
Topik namespace Layanan Event Grid menerima peristiwa yang mematuhi spesifikasi Cloud Native Computing Foundation (CNCF) CloudEvents 1.0 standar terbuka menggunakan protokol HTTP yang mengikat dengan format JSON. CloudEvent adalah semacam pesan yang berisi apa yang sedang dikomunikasikan, disebut sebagai data peristiwa, dan metadata tentang hal itu. Data peristiwa dalam arsitektur berbasis peristiwa biasanya membawa informasi yang mengumumkan perubahan status sistem. Metadata CloudEvents terdiri dari sekumpulan atribut yang memberikan informasi kontekstual tentang pesan seperti asalnya (sistem sumber), jenisnya, dll. Semua pesan valid yang mematuhi spesifikasi CloudEvents harus menyertakan atribut konteks yang diperlukan berikut:
Spesifikasi CloudEvents juga menentukan atribut konteks opsional dan ekstensi yang dapat Anda sertakan saat menggunakan Event Grid.
Saat menggunakan Event Grid, CloudEvents adalah format peristiwa pilihan karena kasus penggunaannya yang didokumentasikan dengan baik (mode untuk mentransfer peristiwa, format peristiwa, dll.), ekstensibilitas, dan peningkatan interoperabilitas. CloudEvents meningkatkan interoperabilitas dengan menyediakan format peristiwa umum untuk menerbitkan dan menggunakan peristiwa. Ini memungkinkan alat seragam dan cara standar perutean & penanganan peristiwa.
CloudEvents con mode tenda s
Spesifikasi CloudEvents mendefinisikan tiga con mode tenda s: biner, terstruktur, dan batch.
Penting
Dengan con apa pun mode tenda Anda dapat bertukar teks (JSON, teks/*, dll.) atau data peristiwa yang dikodekan biner. Biner con mode tenda tidak secara eksklusif digunakan untuk mengirim data biner.
Con mode tenda s bukan tentang pengodean yang Anda gunakan, biner, atau teks, tetapi tentang bagaimana data peristiwa dan metadatanya dijelaskan dan ditukar. Con terstruktur mode tenda menggunakan satu struktur, misalnya, objek JSON, di mana atribut konteks dan data peristiwa bersama-sama dalam payload HTTP. Biner con mode tenda memisahkan atribut konteks, yang dipetakan ke header HTTP, dan data peristiwa, yang merupakan payload HTTP yang dikodekan sesuai dengan jenis media yang diatur dalam Content-Type
.
Dukungan CloudEvents
Tabel ini memperlihatkan dukungan saat ini untuk spesifikasi CloudEvents:
CloudEvents con mode tenda | Didukung? |
---|---|
JSON terstruktur | Ya |
JSON terstruktur di-batch | Ya, untuk menerbitkan peristiwa |
Biner | Ya, untuk menerbitkan peristiwa |
Ukuran maksimum yang diperbolehkan untuk suatu acara adalah 1 MB. Peristiwa di atas 64 KB dikenakan biaya dengan 64 KB tahapan.
Con terstruktur mode tenda
Pesan di cloudEvents terstruktur con mode tenda memiliki atribut konteks dan data peristiwa bersama-sama dalam payload HTTP.
Penting
Saat ini, Event Grid mendukung format CloudEvents JSON dengan HTTP.
Berikut adalah contoh CloudEvents dalam mode terstruktur menggunakan format JSON. Kedua metadata (semua atribut yang bukan "data") dan data pesan/peristiwa (objek "data") dijelaskan menggunakan JSON. Contoh kami mencakup semua atribut konteks yang diperlukan bersama dengan beberapa atribut opsional (subject
, , time
dan datacontenttype
) dan atribut ekstensi (comexampleextension1
, comexampleothervalue
).
{
"specversion" : "1.0",
"type" : "com.yourcompany.order.created",
"source" : "/orders/account/123",
"subject" : "O-28964",
"id" : "A234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/json",
"data" : {
"orderId" : "O-28964",
"URL" : "https://com.yourcompany/orders/O-28964"
}
}
Anda dapat menggunakan format JSON dengan konten terstruktur untuk mengirim data peristiwa yang bukan nilai JSON. Untuk itu, Anda melakukan langkah-langkah berikut:
datacontenttype
Sertakan atribut dengan jenis media tempat data dikodekan.- Jika jenis media dikodekan dalam format teks seperti
text/plain
, ,text/csv
atauapplication/xml
, Anda harus menggunakandata
atribut dengan string JSON yang berisi apa yang Anda komunikasikan sebagai nilai. - Jika jenis media mewakili pengodean biner, Anda harus menggunakan
data_base64
atribut yang nilainya adalah string JSON yang berisi nilai biner yang dikodekan BASE64 .
Misalnya, CloudEvent ini membawa data peristiwa yang dikodekan application/protobuf
untuk bertukar pesan Protobuf.
{
"specversion" : "1.0",
"type" : "com.yourcompany.order.created",
"source" : "/orders/account/123",
"id" : "A234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"datacontenttype" : "application/protobuf",
"data_base64" : "VGhpcyBpcyBub3QgZW5jb2RlZCBpbiBwcm90b2J1ZmYgYnV0IGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMsIGltYWdpbmUgdGhhdCBpdCBpcyA6KQ=="
}
Untuk informasi selengkapnya tentang penggunaan data
atribut atau data_base64
, lihat Penanganan data .
Untuk informasi selengkapnya tentang con ini mode tenda, lihat spesifikasi kon terstruktur HTTP CloudEvents mode tenda .
Con batched mode tenda
Event Grid saat ini mendukung con batch JSON mode tenda saat menerbitkan CloudEvents ke Event Grid. Con ini mode tenda menggunakan array JSON yang diisi dengan CloudEvents dalam con terstruktur mode tenda. Misalnya, aplikasi Anda dapat menerbitkan dua peristiwa menggunakan array seperti berikut ini. Demikian juga, jika Anda menggunakan SDK sarana data Event Grid, payload ini juga yang sedang dikirim:
[
{
"specversion": "1.0",
"id": "E921-1234-1235",
"source": "/mycontext",
"type": "com.example.someeventtype",
"time": "2018-04-05T17:31:00Z",
"data": "some data"
},
{
"specversion": "1.0",
"id": "F555-1234-1235",
"source": "/mycontext",
"type": "com.example.someeventtype",
"time": "2018-04-05T17:31:00Z",
"data": {
"somekey" : "value",
"someOtherKey" : 9
}
}
]
Untuk informasi selengkapnya, lihat Spesifikasi Mode Konten Batch cloudEvents.
Pembuatan batch
Aplikasi Anda harus mengumpulkan beberapa peristiwa bersama-sama dalam array untuk mencapai efisiensi yang lebih besar dan throughput yang lebih tinggi dengan satu permintaan penerbitan. Batch bisa hingga 1 MB dan ukuran maksimum suatu peristiwa adalah 1 MB.
Biner con mode tenda
CloudEvent dalam biner con mode tenda memiliki atribut konteks yang dijelaskan sebagai header HTTP. Nama header HTTP adalah nama atribut konteks yang diawali dengan ce-
. Header Content-Type
mencerminkan jenis media tempat data peristiwa dikodekan.
Penting
Saat menggunakan biner con mode tenda ce-datacontenttype
header HTTP TIDAK BOLEH juga ada.
Penting
Jika Anda berencana untuk menyertakan atribut Anda sendiri (yaitu atribut ekstensi) saat menggunakan biner con mode tenda, pastikan bahwa namanya terdiri dari huruf kecil ('a' hingga 'z') atau digit ('0' hingga '9') dari karakter ASCII dan panjangnya tidak melebihi 20 karakter. Artinya, konvensi penamaan untuk penamaan atribut konteks CloudEvents lebih ketat daripada nama header HTTP yang valid. Tidak setiap nama header HTTP yang valid adalah nama atribut ekstensi yang valid.
Payload HTTP adalah data peristiwa yang dikodekan sesuai dengan jenis media di Content-Type
.
Permintaan HTTP yang digunakan untuk menerbitkan CloudEvent dalam mode biner konten dapat terlihat seperti contoh ini:
POST / HTTP/1.1
HOST mynamespace.eastus-1.eventgrid.azure.net/topics/mytopic
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: A234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/protobuf
Binary data according to protobuf encoding format. No context attributes are included.
Kapan menggunakan biner CloudEvents atau con terstruktur mode tenda
Anda dapat menggunakan con terstruktur mode tenda jika Anda menginginkan pendekatan sederhana untuk meneruskan CloudEvents di seluruh hop dan protokol. Karena CloudEvent dalam con terstruktur mode tenda berisi pesan bersama dengan metadatanya, mudah bagi klien untuk menggunakannya secara keseluruhan dan meneruskannya ke sistem lain.
Anda dapat menggunakan biner con mode tenda jika Anda tahu aplikasi hilir hanya memerlukan pesan tanpa informasi tambahan (yaitu, atribut konteks). Meskipun dengan con terstruktur mode tenda Anda masih bisa mendapatkan data peristiwa (pesan) dari CloudEvent, lebih mudah jika aplikasi konsumen hanya memilikinya di payload HTTP. Misalnya, aplikasi lain dapat menggunakan protokol lain dan mungkin hanya tertarik pada pesan inti Anda, bukan metadatanya. Bahkan, metadata bisa relevan hanya untuk hop pertama segera. Dalam hal ini, memiliki data yang ingin Anda tukarkan dari metadatanya meminjamkan dirinya sendiri ke penanganan dan penerusan yang lebih mudah.
Konten terkait
- Untuk pengantar Event Grid, lihat Tentang Event Grid.
- Untuk mulai menggunakan topik namespace layanan, lihat menerbitkan peristiwa menggunakan topik namespace.