Extensão do CloudEvents para o ouvinte de eventos do Azure Web PubSub com o protocolo AMQP
O serviço do Azure Web PubSub descreve eventos de cliente como CloudEvents. CloudEvents é uma especificação para descrever dados de eventos em formatos comuns a fim de fornecer interoperabilidade entre serviços, plataformas e sistemas.
Os ouvintes de eventos do serviço escutam eventos do cliente. Atualmente, os Hubs de Eventos são o único ponto de extremidade de ouvinte de eventos com suporte, e o protocolo primário associado é o AMQP (Advanced Message Queueing Protocol). O serviço do Web PubSub usa a associação do protocolo AMQP de CloudEvents para mapear CloudEvents para mensagens AMQP.
Os dados enviados do serviço para o servidor estão sempre no formato de CloudEvents binary
.
Extensão de atributo CloudEvents da Web PubSub
Essa extensão define os atributos usados pelo Web PubSub para cada evento produzido.
A tabela a seguir contém o mapeamento de atributos para a seção de propriedades padrão de uma mensagem AMQP.
Nome | Descrição | Exemplo |
---|---|---|
content-type |
O tipo MIME RFC-2046 para o corpo da mensagem | aplicativo/json |
message-id |
Define exclusivamente uma mensagem em um serviço do Web PubSub, no formato "{connection-id}/{an integer generated by service}" | 0bd83792-2a0c-48d3-9fbd-df63aa2ed9db/1 |
A tabela a seguir contém todos os atributos de CloudEvents que são mapeados para a seção de propriedades do aplicativo de uma mensagem AMQP. Cada nome de atributo é prefixado com cloudEvents:
.
Nome | Descrição | Exemplo |
---|---|---|
specversion |
A versão de especificação de eventos de nuvem é sempre 1.0 | 1.0 |
source |
Indica o hub e a ID de conexão de onde o evento vem, no formato "/hubs/{hub}/client/{connectionId}" | /hubs/chat/client/0bd83792-2a0c-48d3-9fbd-df63aa2ed9db |
id |
Um inteiro gerado pelo serviço, exclusivo nos eventos da mesma conexão de cliente | 1 |
awpsversion |
A versão da especificação do Azure Web PubSub para eventos de nuvem é sempre 1.0 | 1.0 |
hub |
O nome do hub de onde o evento vem | chat |
eventname |
O nome do evento | connected |
type |
O tipo de evento | azure.webpubsub.sys.connect |
connectionid |
A ID da conexão de cliente | 0bd83792-2a0c-48d3-9fbd-df63aa2ed9db |
time |
A hora em que o serviço envia o evento, no formato "yyyy-MM-ddTHH:mm:ssZ" | 2021-01-01T00:00:00Z |
userid * |
A ID do usuário | user1 |
subprotocol * |
O nome do subprotocolo | json.webpubsub.azure.v1 |
connectionstate * |
Define o estado da conexão. É possível redefinir o valor no cabeçalho de resposta dos manipuladores de eventos. Para saber mais sobre o estado da conexão, confira Atributos de CloudEvents do Web PubSub. | anystring |
O "*" após o nome do atributo indica que ele está presente somente quando o valor não é nulo ou está vazio.
Eventos
Esta seção mostra o corpo da mensagem AMQP com os valores de atributo que dependem de um tipo de evento de cliente específico. Os valores de atributo que não dependem de um tipo de evento de cliente são omitidos.
- Evento
connect
do sistema: não há suporte nos ouvintes de eventos. - Evento
connected
do sistema - Evento
disconnected
do sistema - Eventos
message
do usuário para os clientes simples do WebSocket - Evento personalizado
{custom_event}
do usuário para clientes do WebSocket do PubSub
Evento connected
do sistema
content-type
:application/json
cloudEvents:type
:azure.webpubsub.sys.connected
cloudEvents:eventname
:connected
O corpo da mensagem é sempre um JSON vazio.
{}
Evento disconnected
do sistema
content-type
:application/json
cloudEvents:type
:azure.webpubsub.sys.disconnected
cloudEvents:eventname
:disconnected
O corpo da mensagem contém o motivo pelo qual o cliente se desconectou.
{"reason":"{Reason}"}
Eventos message
do usuário para os clientes simples do WebSocket
content-type
:application/octet-stream
para quadro binário;text/plain
para quadro de texto;cloudEvents:type
:azure.webpubsub.user.message
O corpo da mensagem é o que o cliente envia.
Evento personalizado do usuário {custom_event}
para clientes PubSub WebSocket
content-type
:application/octet-stream
para quadro binário;application/json
para quadro JSON;text/plain
para quadro de texto;application/x-protobuf
para quadro Protobuf;cloudEvents:type
:azure.webpubsub.user.<event_name>
Os casos a seguir mostram como enviar eventos com diferentes tipos de conteúdo de dados e os corpos de mensagens AMQP recebidas.
Caso 1: enviar evento com dados de texto:
{
"type": "event",
"event": "<event_name>",
"dataType": "text",
"data": "text data"
}
Corpo da mensagem AMQP recebida:
text data
Caso 2: enviar evento com dados JSON:
{
"type": "event",
"event": "<event_name>",
"dataType": "json",
"data": {
"hello": "world"
}
}
Corpo da mensagem AMQP recebida:
{
"hello": "world"
}
Caso 3: enviar evento com dados binários:
{
"type": "event",
"event": "<event_name>",
"dataType": "binary",
"data": "aGVsbG8gd29ybGQ=" // base64 encoded binary
}
Corpo da mensagem AMQP recebida:
<binary data>