Điều kiện kích hoạt Pub/Sub


Pub/Sub của Google Cloud là một bus thông báo được phân phối trên toàn cầu và tự động mở rộng 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 trình xử lý sự kiện onPublish():

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

Truy cập vào tải trọng thông báo pub/sub {:#access-pub/sub}

Bạn có thể truy cập vào tải trọng của 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 nội dung thông báo Pub/Sub, SDK Firebase cho Cloud Functions có một thuộc tính trợ giúp để giải mã thông báo. Ví dụ: sau đây là một thông báo được xuất bản bằng một 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 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ông phải JSON khác có trong thông báo Pub/Sub dưới dạng các 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 của thư {:#access-message}

Thông báo Pub/Sub có thể được gửi cùng với các thuộc tính dữ liệu được đặt trong lệnh publish. Ví dụ: bạn có thể xuất bản một thông báo 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 một số dữ liệu cơ bản như mã nhận dạng thông báo hoặc thời gian xuất bản thông báo không có trong Message.attributes. Để giải quyết vấn đề này, bạn có thể truy cập vào những thông tin 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);
});