Trình kích hoạt Pub / Sub

Google Cloud của Pub / Sub là một chiếc xe buýt thông điệp phân bố trên toàn cầu tự động quy mô như bạn cần nó. Bạn có thể tạo một hàm xử lý Pub / sự kiện Sub bằng cách sử dụng functions.pubsub .

Kích hoạt một chức năng pub / sub

Bạn có thể kích hoạt một chức năng 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 Pub / Sub chủ đề tên mà bạn muốn kích hoạt chức năng của bạn, và thiết lập sự kiện trong onPublish() xử lý sự kiện:

exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => {
  // ...
});

Truy cập tải trọng tin nhắn pub / sub

Tải trọng cho tin nhắn Pub / Sub có thể truy cập từ các Message đối tượng quay trở lại chức năng của bạn. Đối với thư có JSON trong nội dung thư Pub / Sub, SDK Firebase cho Chức năng đám mây có thuộc tính trợ giúp để giải mã thư. Ví dụ: đây là một thông báo được xuất bản với 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 một dữ liệu tải trọng JSON như thế này thông qua json bất động sản:

  // 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 các chuỗi được mã hóa 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ã hóa base64 như hình minh họa:

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 thuộc tính tin nhắn

Thông báo Pub / Sub có thể được gửi với 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 tin nhắn với một name thuộc tính:

gcloud pubsub topics publish topic-name --attribute name=Xenia

Bạn có thể đọ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ư ID tin nhắn hoặc thông điệp thời gian xuất bản không có sẵn trong Message.attributes . Để làm việc này, bạn có thể truy cập vào các sự kiện kích hoạt của context.eventIdcontext.timestamp , mà bạn có thể xác định khi nào bất kỳ thông điệp được công bố và thông điệp một sự khác biệt với nhau. 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);
});