Поделиться через


Сетка событий Azure пространства имен — поддержка схемы CloudEvents

Разделы пространства имен сетки событий принимают события, которые соответствуют открытой спецификации CloudEvents 1.0 с использованием привязки протокола HTTP с форматом JSON. CloudEvent — это своего рода сообщение, содержащее обмен данными, называемые данными о событиях и метаданными об этом. Данные событий в архитектуре, управляемой событиями, обычно содержат сведения об изменении состояния системы. Метаданные CloudEvents состоят из набора атрибутов, которые предоставляют контекстные сведения о сообщении, например о том, где она возникла (исходная система), тип и т. д. Все допустимые сообщения, которые относятся к спецификациям CloudEvents, должны содержать следующие обязательные атрибуты контекста:

Спецификация CloudEvents также определяет необязательные атрибуты контекста расширения, которые можно включить при использовании сетки событий.

При использовании Сетки событий CloudEvents является предпочтительным форматом событий из-за его хорошо документированных вариантов использования (режимы передачи событий, форматов событий и т. д.), расширяемость и улучшенная совместимость. CloudEvents улучшает взаимодействие, предоставляя общий формат событий для публикации и использования событий. Он позволяет использовать универсальные средства и стандартные способы маршрутизации и обработки событий.

CloudEvents con режим палатки s

Спецификация CloudEvents определяет три кон режим палатки: двоичные, структурированные и пакетные.

Внимание

С помощью любого con режим палатки вы можете обмениваться текстом (JSON, text/*и т. д.) или двоичными данными событий. Двоичное con режим палатки не используется исключительно для отправки двоичных данных.

Кон режим палатки не о кодировке, используемой, двоичной или текстовой, а о том, как данные события и его метаданные описываются и обмениваются ими. Структурированный con режим палатки использует одну структуру, например объект JSON, где атрибуты контекста и данные события объединяются в полезные данные HTTP. Двоичный кон режим палатки разделяет атрибуты контекста, которые сопоставляются с заголовками HTTP и данными событий, которые являются полезными данными HTTP, закодированными в соответствии с заданным типом Content-Typeносителя.

Поддержка CloudEvents

В этой таблице показана текущая поддержка спецификации CloudEvents:

CloudEvents con режим палатки Поддерживается?
Структурированный JSON Да
Структурированный пакет JSON Да, для публикации событий
Binary Да, для публикации событий

Максимально допустимый размер события — 1 МБ. Плата за события свыше 64 КБ начисляется с приращением в 64 КБ.

Структурированный con режим палатки

Сообщение в CloudEvents структурированное con режим палатки содержит как атрибуты контекста, так и данные события вместе в полезных данных HTTP.

Внимание

В настоящее время Служба "Сетка событий" поддерживает формат JSON CloudEvents с протоколом HTTP.

Ниже приведен пример CloudEvents в структурированном режиме с использованием формата JSON. Оба метаданных (все атрибуты, которые не являются "данными") и данные сообщения или события (объект data) описываются с помощью JSON. Наш пример включает все обязательные атрибуты контекста, а также некоторые необязательные атрибуты (subject, timeи datacontenttype) и атрибуты расширения (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"
    }
}

Формат JSON можно использовать с структурированным содержимым для отправки данных событий, которые не имеют значения JSON. Для этого выполните следующие действия.

  1. Включите атрибут с типом datacontenttype носителя, в котором кодируются данные.
  2. Если тип носителя закодирован в текстовом формате, например text/plain, text/csvили application/xml, следует использовать data атрибут со строкой JSON, содержащей то, что вы взаимодействуете в качестве значения.
  3. Если тип носителя представляет двоичную кодировку, следует использовать data_base64 атрибут, значение которого — строка JSON, содержащая двоичное значение в кодировке BASE64 .

Например, этот CloudEvent содержит данные событий, закодированные для application/protobuf обмена сообщениями 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=="
}

Дополнительные сведения об использовании data или data_base64 атрибутах см. в разделе "Обработка данных ".

Дополнительные сведения об этом con режим палатки см. в спецификациях cloudEvents HTTP, структурированных con режим палатки.

Пакетный кон режим палатки

Сетка событий в настоящее время поддерживает пакетный конус JSON режим палатки при публикации CloudEvents в Сетку событий. Этот con режим палатки использует массив JSON, заполненный CloudEvents в структурированном con режим палатки. Например, приложение может публиковать два события с помощью массива, как показано ниже. Аналогичным образом, если вы используете пакет SDK плоскости данных сетки событий, эта полезные данные также отправляются:

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

Дополнительные сведения см. в спецификациях режима пакетного содержимого CloudEvents.

Пакетная обработка

Приложение должно пакетировать несколько событий вместе в массиве, чтобы обеспечить большую эффективность и более высокую пропускную способность с помощью одного запроса на публикацию. Пакеты могут иметь размер до 1 МБ, а максимальный размер события составляет 1 МБ.

Двоичное con режим палатки

CloudEvent в двоичном con режим палатки имеет атрибуты контекста, описанные как заголовки HTTP. Имена заголовков HTTP — это имя атрибута контекста, префиксированного с ce-помощью. Заголовок Content-Type отражает тип носителя, в котором кодируются данные события.

Внимание

При использовании двоичного конуса режим палатки ce-datacontenttype заголовок HTTP не должен присутствовать.

Внимание

Если вы планируете включить собственные атрибуты (т. е. атрибуты расширения) при использовании двоичного конуса режим палатки убедитесь, что их имена состоят из строчные буквы ("a" до z) или цифры ("0" до "9") из символа ASCII и что они не превышают 20 символов в длину. То есть соглашение об именовании атрибутов контекста CloudEvents является более строгим, чем для допустимых имен заголовков HTTP. Недопустимое имя заголовка HTTP является допустимым именем атрибута расширения.

Полезные данные HTTP — это данные события, закодированные в соответствии с типом носителя.Content-Type

HTTP-запрос, используемый для публикации CloudEvent в двоичном режиме содержимого, может выглядеть следующим образом:

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.

Когда следует использовать двоичный или структурированный con режим палатки

Вы можете использовать структурированный con режим палатки если вы хотите простой подход к пересылке CloudEvents между прыжками и протоколами. Так как CloudEvent в структурированном con режим палатки содержит сообщение вместе со своими метаданными, клиенты легко использовать его в целом и пересылать его в другие системы.

Вы можете использовать двоичный con режим палатки если известно, что подчиненные приложения требуют только сообщения без дополнительных сведений (т. е. атрибутов контекста). Хотя с структурированным con режим палатки вы по-прежнему можете получить данные события (сообщение) из CloudEvent, проще, если приложение-потребитель просто имеет его в полезных данных HTTP. Например, другие приложения могут использовать другие протоколы и могут быть заинтересованы только в основном сообщении, а не его метаданных. На самом деле метаданные могут быть релевантными только для немедленного первого прыжка. В этом случае наличие данных, которые требуется обменять, помимо метаданных, упрощает обработку и пересылку.