Dela via


Azure Event Grid-namnområden – stöd för CloudEvents-schema

Event Grid-namnområdesämnen accepterar händelser som följer CNCF:s öppna CloudEvents 1.0-standardspecifikation med http-protokollbindningen med JSON-format. En CloudEvent är ett slags meddelande som innehåller det som kommuniceras, kallas händelsedata och metadata om det. Händelsedata i händelsedrivna arkitekturer innehåller vanligtvis information om en ändring av systemtillståndet. CloudEvents-metadata består av en uppsättning attribut som ger sammanhangsberoende information om meddelandet, till exempel var det härstammar (källsystemet), dess typ osv. Alla giltiga meddelanden som följer CloudEvents-specifikationerna måste innehålla följande obligatoriska kontextattribut:

CloudEvents-specifikationen definierar även valfria och tilläggskontextattribut som du kan inkludera när du använder Event Grid.

När du använder Event Grid är CloudEvents det föredragna händelseformatet på grund av dess väldokumenterade användningsfall (lägen för överföring av händelser, händelseformat osv.), utökningsbarhet och förbättrad samverkan. CloudEvents förbättrar samverkan genom att tillhandahålla ett gemensamt händelseformat för publicering och användning av händelser. Det möjliggör enhetliga verktyg och standardsätt för routning och hantering av händelser.

CloudEvents con tältläge s

CloudEvents-specifikationen definierar tre con tältläge s: binär, strukturerad och batchbaserad.

Viktigt!

Med valfri con tältläge kan du utbyta text (JSON, text/*osv.) eller binärkodade händelsedata. Binärt con tältläge används inte uteslutande för att skicka binära data.

Con tältläge handlar inte om den kodning som du använder, binär eller text, utan om hur händelsedata och dess metadata beskrivs och utbyts. Den strukturerade con tältläge använder en enda struktur, till exempel ett JSON-objekt, där både kontextattributen och händelsedata är tillsammans i HTTP-nyttolasten. Binärkon tältläge separerar kontextattribut, som mappas till HTTP-huvuden och händelsedata, som är HTTP-nyttolasten kodad enligt medietypen som anges i Content-Type.

Stöd för CloudEvents

Den här tabellen visar det aktuella stödet för CloudEvents-specifikationen:

CloudEvents con tältläge Stöds?
Strukturerad JSON Ja
Strukturerad JSON batch Ja, för publiceringshändelser
Binär Ja, för publiceringshändelser

Den maximala tillåtna storleken för en händelse är 1 MB. Händelser över 64 KB debiteras i steg om 64 KB.

Strukturerade tältläge

Ett meddelande i CloudEvents structured con tältläge har både kontextattributen och händelsedata tillsammans i en HTTP-nyttolast.

Viktigt!

För närvarande stöder Event Grid CloudEvents JSON-format med HTTP.

Här är ett exempel på en CloudEvents i strukturerat läge med JSON-format. Både metadata (alla attribut som inte är "data") och meddelande-/händelsedata ("data"-objektet) beskrivs med JSON. Vårt exempel innehåller alla obligatoriska kontextattribut tillsammans med några valfria attribut (subject, time, och datacontenttype) och tilläggsattribut (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"
    }
}

Du kan använda JSON-formatet med strukturerat innehåll för att skicka händelsedata som inte är ett JSON-värde. I detta syfte gör du följande:

  1. Inkludera ett datacontenttype attribut med medietypen där data kodas.
  2. Om medietypen är kodad i ett textformat som text/plain, text/csveller application/xml, bör du använda ett data attribut med en JSON-sträng som innehåller det du kommunicerar som värde.
  3. Om medietypen representerar en binär kodning bör du använda ett data_base64 attribut vars värde är en JSON-sträng som innehåller det BASE64-kodade binära värdet.

Den här CloudEvent har till exempel händelsedata kodade i application/protobuf för att utbyta Protobuf-meddelanden.

{
    "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=="
}

Mer information om användningen av attributen data eller data_base64 finns i Hantera data .

Mer information om den här con tältläge finns i CloudEvents HTTP structured con tältläge specifications .

Batchkon tältläge

Event Grid stöder för närvarande JSON-batchkon tältläge vid publicering av CloudEvents till Event Grid. Den här con tältläge använder en JSON-matris fylld med CloudEvents i strukturerade con tältläge. Ditt program kan till exempel publicera två händelser med hjälp av en matris som följande. På samma sätt, om du använder Event Grids SDK för dataplanet, är den här nyttolasten också det som skickas:

[
    {
        "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
        }
    }
]

Mer information finns i CloudEvents Specifikationer för batchbaserat innehållsläge .

Batchbearbetning

Programmet bör gruppera flera händelser i en matris för att uppnå större effektivitet och högre dataflöde med en enda publiceringsbegäran. Batchar kan vara upp till 1 MB och den maximala storleken för en händelse är 1 MB.

Binärt con tältläge

En CloudEvent i binärt tältläge har sina kontextattribut som beskrivs som HTTP-huvuden. Namnen på HTTP-huvudena är namnet på kontextattributet som prefixet med ce-. Rubriken Content-Type visar medietypen där händelsedata kodas.

Viktigt!

När du använder binärkon tältläge ce-datacontenttype måste HTTP-huvudet INTE också finnas.

Viktigt!

Om du planerar att inkludera dina egna attribut (dvs. tilläggsattribut) när du använder binärt con tältläge kontrollerar du att deras namn består av gemener ("a" till "z") eller siffror ("0" till "9") från ASCII-tecknet och att de inte överskrider 20 tecken. Namngivningskonventionen för namngivning av CloudEvents-kontextattribut är alltså mer restriktiv än för giltiga HTTP-huvudnamn. Alla giltiga HTTP-huvudnamn är inte ett giltigt tilläggsattributnamn.

HTTP-nyttolasten är händelsedata som kodas enligt medietypen i Content-Type.

En HTTP-begäran som används för att publicera en CloudEvent i binärt innehållsläge kan se ut så här:

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.

När du ska använda CloudEvents binära eller strukturerade con tältläge

Du kan använda strukturerade con tältläge om du vill ha en enkel metod för vidarebefordran av CloudEvents mellan hopp och protokoll. Eftersom en CloudEvent i strukturerad con tältläge innehåller meddelandet tillsammans med dess metadata, är det enkelt för klienter att använda det som helhet och vidarebefordra det till andra system.

Du kan använda binär con tältläge om du vet att underordnade program bara kräver meddelandet utan extra information (det vill: kontextattributen). Med strukturerad con tältläge kan du fortfarande hämta händelsedata (meddelande) från CloudEvent, men det är enklare om ett konsumentprogram bara har dem i HTTP-nyttolasten. Andra program kan till exempel använda andra protokoll och kanske bara vara intresserade av ditt kärnmeddelande, inte dess metadata. Faktum är att metadata kan vara relevanta bara för det omedelbara första hoppet. I det här fallet är det enklare att hantera och vidarebefordra data som du vill utbyta förutom dess metadata.