Kích hoạt Pub / Sub


Pub/Sub của Google Cloud là một bus tin nhắn đượ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 chức năng pub/sub

Bạn có thể kích hoạt chức năng bất cứ khi nào có tin nhắn 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 chức năng của mình và đặt sự kiện trong trình xử lý sự kiện onPublish() :

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

Truy cập tải trọng tin nhắn pub/sub {:#access-pub/sub}

Tải trọng cho tin nhắn Pub/Sub có thể truy cập được từ đối tượng Message được trả về hàm của bạn. Đối với các thông báo có JSON trong nội dung thông báo Pub/Sub, SDK Firebase dành cho Chức năng đám mây có 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 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 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ã hóa base64 trong đối tượng thông báo. Để đọc được tin nhắn như sau, bạn phải giải mã chuỗi được mã hóa base64 như sau:

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 {:#access-message}

Tin nhắn 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 có thuộc tính name :

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ư ID tin nhắn hoặc thời gian xuất bản tin nhắn không có sẵn trong Message.attributes . Để giải quyết vấn đề này, bạn có thể truy cập các chi tiết này trong EventContext của sự kiện kích hoạt. 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);
});