Estensione CloudEvents per il listener di eventi PubSub di Azure con il protocollo AMQP
Il servizio Web PubSub di Azure descrive gli eventi client come CloudEvents. CloudEvents è una specifica per descrivere i dati degli eventi in formati comuni per garantire l'interoperabilità tra servizi, piattaforme e sistemi.
I listener di eventi del servizio sono in ascolto degli eventi client. Hub eventi è attualmente l'unico endpoint del listener di eventi supportato, il cui protocollo primario è AMQP (Advanced Message Queueing Protocol). Il servizio Web PubSub usa l'associazione del protocollo AMQP CloudEvents per eseguire il mapping di CloudEvents ai messaggi AMQP.
I dati inviati dal servizio al server sono sempre in formato CloudEvents binary
.
Estensione dell'attributo Web PubSub CloudEvents
Questa estensione definisce gli attributi usati da Web PubSub per ogni evento prodotto.
La tabella seguente contiene attributi di mapping alla sezione delle proprietà standard di un messaggio AMQP.
Nome | Descrizione | Esempio |
---|---|---|
content-type |
Tipo MIME RFC-2046 per il corpo del messaggio | application/json |
message-id |
Definisce in modo univoco un messaggio in un servizio Web PubSub, nel formato "{connection-id}/{un numero intero generato dal servizio}" | 0bd83792-2a0c-48d3-9fbd-df63aa2ed9db/1 |
La tabella seguente contiene tutti gli attributi CloudEvents mappati alla sezione delle proprietà dell'applicazione di un messaggio AMQP. Ogni nome di attributo è preceduto da cloudEvents:
.
Nome | Descrizione | Esempio |
---|---|---|
specversion |
La versione delle specifiche degli eventi cloud è sempre 1.0 | 1.0 |
source |
Indica l'hub e l'ID di connessione da cui proviene l'evento, nel formato "/hubs/{hub}/client/{connectionId}" | /hubs/chat/client/0bd83792-2a0c-48d3-9fbd-df63aa2ed9db |
id |
Intero generato dal servizio, univoco negli eventi dalla stessa connessione client | 1 |
awpsversion |
Gli eventi cloud versione della specifica PubSub di Azure sono sempre 1.0 | 1.0 |
hub |
Nome dell'hub da cui proviene l'evento | chat |
eventname |
Il nome dell'evento | connected |
type |
Tipo di evento | azure.webpubsub.sys.connect |
connectionid |
ID della connessione client | 0bd83792-2a0c-48d3-9fbd-df63aa2ed9db |
time |
Ora in cui il servizio invia l'evento, nel formato "aa-MM-ggTHH:mm:ssZ" | 2021-01-01T00:00:00Z |
userid * |
ID dell'utente | user1 |
subprotocol * |
Nome sottoprotocolo | json.webpubsub.azure.v1 |
connectionstate * |
Definisce lo stato per la connessione. È possibile reimpostare il valore nell'intestazione della risposta dei gestori eventi. Per altre informazioni sullo stato della connessione, vedere Attributi Web PubSub CloudEvents. | anystring |
Il valore "*" che segue il nome dell'attributo indica che l'attributo è presente solo quando il valore non è null o vuoto.
evento
Questa sezione mostra il corpo del messaggio AMQP con i valori dell'attributo che dipendono da un tipo di evento client specifico. I valori degli attributi che non dipendono da un tipo di evento client vengono omessi.
- Evento di sistema
connect
: non supportato dai listener di eventi. - Evento di sistema
connected
- Evento di sistema
disconnected
- Eventi
message
utente per i client WebSocket semplici - Evento personalizzato dell'utente
{custom_event}
per i client WebSocket PubSocket
Evento di sistema connected
content-type
:application/json
cloudEvents:type
:azure.webpubsub.sys.connected
cloudEvents:eventname
:connected
Il corpo del messaggio è sempre JSON vuoto.
{}
Evento di sistema disconnected
content-type
:application/json
cloudEvents:type
:azure.webpubsub.sys.disconnected
cloudEvents:eventname
:disconnected
Il corpo del messaggio contiene il motivo per cui il client è disconnesso.
{"reason":"{Reason}"}
Eventi message
utente per i client WebSocket semplici
content-type
:application/octet-stream
per frame binario;text/plain
per cornice di testo;cloudEvents:type
:azure.webpubsub.user.message
Il corpo del messaggio è ciò che il client invia.
Evento personalizzato dell'utente {custom_event}
per i client WebSocket PubSocket
content-type
:application/octet-stream
per frame binario;application/json
per frame JSON;text/plain
per cornice di testo;application/x-protobuf
per cornice Protobuf;cloudEvents:type
:azure.webpubsub.user.<event_name>
I casi seguenti illustrano come inviare eventi con tipi di contenuto di dati diversi e i corpi dei messaggi AMQP ricevuti.
Caso 1: inviare un evento con dati di testo:
{
"type": "event",
"event": "<event_name>",
"dataType": "text",
"data": "text data"
}
Corpo del messaggio AMQP ricevuto:
text data
Caso 2: inviare un evento con dati JSON:
{
"type": "event",
"event": "<event_name>",
"dataType": "json",
"data": {
"hello": "world"
}
}
Corpo del messaggio AMQP ricevuto:
{
"hello": "world"
}
Caso 3: inviare un evento con dati binari:
{
"type": "event",
"event": "<event_name>",
"dataType": "binary",
"data": "aGVsbG8gd29ybGQ=" // base64 encoded binary
}
Corpo del messaggio AMQP ricevuto:
<binary data>