Questo documento fornisce una panoramica di una sottoscrizione push, del relativo flusso di lavoro e delle proprietà associate.
Nella distribuzione push, Pub/Sub avvia richieste alla tua applicazione sottoscrittore per consegnare i messaggi. I messaggi vengono inviati a un server o a un webhook indirizzabile pubblicamente, ad esempio una richiesta POST HTTPS.
Le sottoscrizioni push riducono al minimo le dipendenze dalle librerie client specifiche di Pub/Sub e dai meccanismi di autenticazione. Funzionano bene anche con le tecnologie di servizi serverless e di scalabilità automatica, come Cloud Run Functions, Cloud Run e Google Kubernetes Engine.
Prima di iniziare
Prima di leggere questo documento, assicurati di conoscere quanto segue:
Come funziona Pub/Sub e i diversi termini di Pub/Sub.
I diversi tipi di abbonamento supportati da Pub/Sub e il motivo per cui potresti voler utilizzare un abbonamento push.
Flusso di lavoro della sottoscrizione push
In una sottoscrizione push, un server Pub/Sub avvia una richiesta al client sottoscrittore per consegnare i messaggi.
L'immagine seguente mostra il flusso di lavoro tra un client sottoscrittore e una sottoscrizione push.
Ecco una breve descrizione del flusso di lavoro a cui fa riferimento la Figura 3:
- Il server Pub/Sub invia ogni messaggio come richiesta HTTPS al client sottoscrittore a un endpoint preconfigurato. Questa richiesta è mostrata come
un
PushRequestnell'immagine. - L'endpoint riconosce il messaggio restituendo un codice di stato HTTP di operazione riuscita. Una risposta non riuscita indica che Pub/Sub deve
inviare nuovamente i messaggi. Questa risposta viene mostrata come
PushResponsenell'immagine. - Pub/Sub regola dinamicamente la frequenza delle richieste push in base alla frequenza con cui riceve risposte positive.
Proprietà di una sottoscrizione push
Le proprietà che configuri per una sottoscrizione push determinano il modo in cui scrivi i messaggi nella sottoscrizione. Per ulteriori informazioni, consulta la sezione sulle proprietà degli abbonamenti.
Come gli endpoint push ricevono i messaggi
Quando Pub/Sub recapita un messaggio a un endpoint push, puoi scegliere di inviarlo con wrapping o senza. Per impostazione predefinita, i messaggi vengono inviati con wrapping.
- Confezionato. Pub/Sub invia il messaggio nel corpo JSON di una richiesta
POST. - Unwrapped. Pub/Sub invia i dati del messaggio non elaborati direttamente come corpo HTTP.
I seguenti esempi mostrano un corpo di una richiesta JSON POST a un endpoint push che contiene la stringa Hello there nel campo message.data
Il corpo di una richiesta POST è un oggetto JSON. I dati del messaggio si trovano nel campo message.data e sono codificati in base64.
Esempio di richiesta con i valori minimi
{ "message": { "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==", "messageId": "2070443601311540", "message_id": "2070443601311540", "publishTime": "2021-02-26T19:13:55.749Z", "publish_time": "2021-02-26T19:13:55.749Z" }, "subscription": "projects/myproject/subscriptions/mysubscription" }
Esempio di richiesta con i valori massimi
Tieni presente che questo esempio mostra i valori massimi attuali, che potrebbero cambiare nel tempo. Inoltre, la mappa degli attributi può contenere una varietà di valori.
{ "deliveryAttempt": 5, "message": { "attributes": { "key": "value" }, "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==", "messageId": "2070443601311540", "message_id": "2070443601311540", "orderingKey": "key", "publishTime": "2021-02-26T19:13:55.749Z", "publish_time": "2021-02-26T19:13:55.749Z" }, "subscription": "projects/myproject/subscriptions/mysubscription" }
Per ricevere messaggi dalle sottoscrizioni push, utilizza un webhook ed elabora le richieste POST che Pub/Sub invia all'endpoint push. Per ulteriori
informazioni sull'elaborazione di queste richieste POST in App Engine, consulta
Scrittura di messaggi Pub/Sub e risposta a tali messaggi.
Dopo aver ricevuto una richiesta push, restituisci un codice di stato HTTP. Per confermare la ricezione del messaggio, restituisci uno dei seguenti codici di stato:
102200201202204
Per inviare un riconoscimento negativo per il messaggio, restituisci qualsiasi altro codice di stato. Se invii un riconoscimento negativo o la scadenza di riconoscimento scade, Pub/Sub invia nuovamente il messaggio. Non puoi modificare la scadenza di conferma dei singoli messaggi che ricevi dagli abbonamenti push.
Autenticazione per le iscrizioni push
Se una sottoscrizione push utilizza l'autenticazione, il servizio Pub/Sub firma un JWT e lo invia nell'intestazione di autorizzazione della richiesta push.
Per saperne di più sulla configurazione dell'autenticazione, consulta Autenticare le richieste push.
Interrompere e riprendere la distribuzione dei messaggi
Per impedire temporaneamente a Pub/Sub di inviare richieste all'endpoint push, modifica l'abbonamento in pull. Il passaggio può richiedere diversi minuti per avere effetto.
Per riprendere la pubblicazione push, imposta di nuovo l'URL su un endpoint valido. Per interrompere definitivamente la pubblicazione, elimina l'iscrizione.
Backoff push
Se un sottoscrittore push invia troppi riconoscimenti negativi, Pub/Sub potrebbe iniziare a recapitare i messaggi utilizzando un backoff push. Quando Pub/Sub utilizza un backoff push, interrompe il recapito dei messaggi per un periodo di tempo predeterminato. Questo intervallo di tempo può variare da 100 millisecondi a 60 secondi. Trascorso il tempo, Pub/Sub riprende a recapitare i messaggi.
Il backoff push utilizza un algoritmo di backoff esponenziale per determinare il ritardo utilizzato da Pub/Sub tra l'invio dei messaggi. Questo periodo di tempo viene calcolato in base al numero di risposte negative che gli abbonati push inviano.
Ad esempio, se un sottoscrittore push riceve cinque messaggi al secondo e invia un riconoscimento negativo al secondo, Pub/Sub recapita i messaggi circa ogni 500 millisecondi. In alternativa, se l'abbonato push invia cinque riconoscimenti negativi al secondo, Pub/Sub recapita i messaggi ogni 30-60 secondi.
Tieni presente le seguenti considerazioni sul backoff push:
- Il backoff push non può essere attivato o disattivato. Inoltre, non puoi modificare i valori utilizzati per calcolare il ritardo.
- I trigger di backoff vengono attivati dalle seguenti azioni:
- Quando viene ricevuto un riconoscimento negativo.
- Quando scade la scadenza di conferma di un messaggio.
- Il backoff push si applica a tutti i messaggi di una sottoscrizione (globale).
Percentuale di pubblicazione
Pub/Sub regola il numero di richieste push simultanee utilizzando un algoritmo di avvio lento. Il numero massimo consentito di richieste push simultanee è la finestra push. La finestra di push aumenta in caso di consegna riuscita e diminuisce in caso di errore. Il sistema inizia con una piccola dimensione della finestra a una sola cifra.
Quando un abbonato conferma i messaggi, la finestra aumenta in modo esponenziale. Per le sottoscrizioni in cui i sottoscrittori confermano più del 99% dei messaggi e la latenza media delle richieste push è inferiore a un secondo, la finestra push deve espandersi a sufficienza per tenere il passo con qualsiasi velocità effettiva di pubblicazione.
La latenza della richiesta push include quanto segue:
La latenza di rete round trip tra i server Pub/Sub e l'endpoint push
Il tempo di elaborazione dell'abbonato
Dopo 3000 messaggi in sospeso per regione, la finestra aumenta linearmente per impedire all'endpoint push di ricevere troppi messaggi. Se la latenza media supera un secondo o l'abbonato riconosce meno del 99% delle richieste, la finestra si riduce al limite inferiore di 3000 messaggi in sospeso.
Per ulteriori informazioni sulle metriche che puoi utilizzare per monitorare la distribuzione push, consulta Monitoraggio delle sottoscrizioni push.
Quote e limiti
Gli abbonamenti push sono soggetti a un insieme di quote e limiti delle risorse.
Passaggi successivi
Crea una sottoscrizione push per l'argomento.
Risolvi i problemi relativi a una sottoscrizione push.
Crea o modifica un abbonamento con gcloud CLI.
Crea o modifica un abbonamento con le API REST.
Crea o modifica un abbonamento con le API RPC.