Google Cloud's Pub/Sub to
globalnie rozproszona magistrala komunikatów, która automatycznie skaluje się w zależności od potrzeb. Możesz utworzyć funkcję, która obsługuje Pub/Sub zdarzenia za pomocą
functions.pubsub.
Aktywowanie funkcji Pub/Sub
Możesz aktywować funkcję za każdym razem, gdy nowa wiadomość Pub/Sub zostanie wysłana
do określonego tematu. Musisz określić nazwę tematu Pub/Sub, który
ma aktywować Twoją funkcję, i ustawić zdarzenie w
onPublish()
procedurze obsługi zdarzeń:
exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => { // ... });
Uzyskiwanie dostępu do ładunku wiadomości Pub/Sub
Ładunek wiadomości Pub/Sub jest dostępny z obiektu
Message zwróconego
do Twojej funkcji. W przypadku wiadomości z kodem JSON w treści wiadomości Pub/Sub pakiet Firebase SDK for Cloud Functions ma właściwość pomocniczą do dekodowania wiadomości. Oto na przykład wiadomość opublikowana z prostym ładunkiem JSON:
gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'
Możesz uzyskać dostęp do ładunku danych JSON w ten sposób za pomocą właściwości
json:
// Get the `name` attribute of the PubSub message JSON body. let name = null; try { name = message.json.name; } catch (e) { functions.logger.error('PubSub message was not JSON', e); }
Inne ładunki, które nie są w formacie JSON, są zawarte w wiadomości Pub/Sub jako ciągi zakodowane w formacie base64 w obiekcie wiadomości. Aby odczytać wiadomość taką jak ta poniżej, musisz zdekodować ciąg zakodowany w formacie base64, jak pokazano poniżej:
gcloud pubsub topics publish topic-name --message 'MyMessage'
// Decode the PubSub Message body. const messageBody = message.data ? Buffer.from(message.data, 'base64').toString() : null;
Uzyskiwanie dostępu do atrybutów wiadomości
Wiadomość Pub/Sub można wysłać z atrybutami danych ustawionymi w
poleceniu publikowania. Możesz na przykład opublikować wiadomość z atrybutem name:
gcloud pubsub topics publish topic-name --attribute name=Xenia
Możesz odczytać takie atrybuty z
Message.attributes:
// Get the `name` attribute of the message. const name = message.attributes.name;
Możesz zauważyć, że niektóre podstawowe dane, takie jak identyfikator wiadomości lub czas publikacji wiadomości, nie są dostępne w Message.attributes. Aby obejść
ten problem, możesz uzyskać dostęp do tych szczegółów w `EventContext` zdarzenia wywołującego
EventContext.
Przykład:
exports.myFunction = functions.pubsub.topic('topic1').onPublish((message, context) => {
console.log('The function was triggered at ', context.timestamp);
console.log('The unique ID for the event is', context.eventId);
});