Google Cloud's Pub/Sub là một
bus thông báo được phân phối trên toàn cầu, tự động điều chỉnh quy mô khi bạn cần. Bạn
có thể tạo một hàm xử lý các sự kiện Pub/Sub bằng cách sử dụng
functions.pubsub.
Kích hoạt hàm pub/sub
Bạn có thể kích hoạt một hàm bất cứ khi nào một thông báo Pub/Sub mới được gửi
đến một chủ đề cụ thể. Bạn phải chỉ định tên chủ đề Pub/Sub mà
bạn muốn kích hoạt hàm và đặt sự kiện trong
onPublish()
trình xử lý sự kiện:
exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => { // ... });
Truy cập vào tải trọng thông báo pub/sub
Bạn có thể truy cập vào tải trọng cho thông báo Pub/Sub từ đối tượng
Message được trả về
cho hàm của bạn. Đối với các thông báo có JSON trong Pub/Sub nội dung
thông báo, Firebase SDK cho Cloud Functions có một thuộc tính trợ giúp để giải mã thông báo. Ví dụ: đây là một thông báo được xuất bản bằng tải trọng JSON đơn giản:
gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'
Bạn có thể truy cập vào tải trọng dữ liệu JSON như thế này thông qua thuộc tính
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); }
Các tải trọng khác không phải JSON được chứa trong thông báo Pub/Sub dưới dạng chuỗi được mã hoá base64 trong đối tượng thông báo. Để đọc một thông báo như sau, bạn phải giải mã chuỗi được mã hoá base64 như minh hoạ:
gcloud pubsub topics publish topic-name --message 'MyMessage'
// Decode the PubSub Message body. const messageBody = message.data ? Buffer.from(message.data, 'base64').toString() : null;
Truy cập vào các thuộc tính thông báo
Pub/Sub thông báo có thể được gửi kèm theo các thuộc tính dữ liệu được đặt trong
lệnh xuất bản. Ví dụ: bạn có thể xuất bản một thông báo có name
thuộc tính:
gcloud pubsub topics publish topic-name --attribute name=Xenia
Bạn có thể đọc các thuộc tính như vậy từ
Message.attributes:
// Get the `name` attribute of the message. const name = message.attributes.name;
Bạn có thể nhận thấy rằng một số dữ liệu cơ bản như mã thông báo hoặc thời gian xuất bản thông báo không có trong Message.attributes. Để khắc phục vấn đề này, bạn có thể truy cập vào các thông tin chi tiết này trong sự kiện kích hoạt's
EventContext.
Ví dụ:
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);
});