Memublikasikan pesan ke topik

Dokumen ini memberikan informasi tentang memublikasikan pesan.

Aplikasi penayang membuat dan mengirim pesan ke topik. Pub/Sub menawarkan pengiriman pesan setidaknya sekali dan pengurutan upaya terbaik kepada pelanggan yang sudah ada.

Alur umum untuk aplikasi penayang adalah:

  1. Buat pesan yang berisi data Anda.
  2. Kirim permintaan ke server Pub/Sub untuk memublikasikan pesan ke topik yang ditentukan.

Sebelum memulai

Sebelum mengonfigurasi alur kerja publikasi, pastikan Anda telah menyelesaikan tugas berikut:

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna memublikasikan pesan ke topik, minta administrator untuk memberi Anda peran IAM Pub/Sub Publisher (roles/pubsub.publisher) pada topik. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Anda memerlukan izin tambahan untuk membuat atau memperbarui topik dan langganan.

Format pesan

Pesan terdiri dari kolom dengan data dan metadata pesan. Tentukan setidaknya salah satu dari berikut ini dalam pesan:

Layanan Pub/Sub menambahkan kolom berikut ke pesan:

  • ID pesan yang unik untuk topik
  • Stempel waktu saat layanan Pub/Sub menerima pesan

Untuk mempelajari pesan lebih lanjut, lihat Format pesan.

Memublikasikan pesan

Anda dapat memublikasikan pesan dengan Google Cloud konsol, Google Cloud CLI, Pub/Sub API, dan library klien. Library klien dapat memublikasikan pesan secara asinkron.

Contoh berikut menunjukkan cara memublikasikan pesan ke topik.

Konsol

Untuk memublikasikan pesan, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman Pub/Sub topics.

    Buka halaman topik Pub/Sub

  2. Klik ID topik.

  3. Di halaman Topic details di bagian Messages, klik Publish message.

  4. Di kolom Isi pesan, masukkan data pesan.

  5. Klik Publikasikan.

gcloud

Untuk memublikasikan pesan, gunakan perintah gcloud pubsub topics publish:

gcloud pubsub topics publish TOPIC_ID \
  --message=MESSAGE_DATA \
  [--attribute=KEY="VALUE",...]

Ganti kode berikut:

  • TOPIC_ID: ID topik
  • MESSAGE_DATA: string dengan data pesan
  • KEY: kunci atribut pesan
  • VALUE: nilai untuk kunci atribut pesan

REST

Untuk memublikasikan pesan, kirim permintaan POST seperti berikut:

POST  https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish
Content-Type: application/json
Authorization: Bearer $(gcloud auth application-default print-access-token)

Ganti kode berikut:

  • PROJECT_ID: project ID project dengan topik
  • TOPIC_ID: ID topik

Tentukan kolom berikut dalam isi permintaan:

{
  "messages": [
    {
      "attributes": {
        "KEY": "VALUE",
        ...
      },
      "data": "MESSAGE_DATA",
    }
  ]
}

Ganti kode berikut:

  • KEY: kunci atribut pesan
  • VALUE: nilai untuk kunci atribut pesan
  • MESSAGE_DATA: string berenkode base64 dengan data pesan

Pesan harus berisi kolom data yang tidak kosong atau minimal satu atribut.

Jika permintaan berhasil, responsnya adalah objek JSON dengan ID pesan. Contoh berikut adalah respons dengan ID pesan:

{
  "messageIds": [
    "19916711285",
  ]
}

C++

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C++ Pub/Sub.

namespace pubsub = ::google::cloud::pubsub;
using ::google::cloud::future;
using ::google::cloud::StatusOr;
[](pubsub::Publisher publisher) {
  auto message_id = publisher.Publish(
      pubsub::MessageBuilder{}.SetData("Hello World!").Build());
  auto done = message_id.then([](future<StatusOr<std::string>> f) {
    auto id = f.get();
    if (!id) throw std::move(id).status();
    std::cout << "Hello World! published with id=" << *id << "\n";
  });
  // Block until the message is published
  done.get();
}

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Pub/Sub.


using Google.Cloud.PubSub.V1;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

public class PublishMessagesAsyncSample
{
    public async Task<int> PublishMessagesAsync(string projectId, string topicId, IEnumerable<string> messageTexts)
    {
        TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
        PublisherClient publisher = await PublisherClient.CreateAsync(topicName);

        int publishedMessageCount = 0;
        var publishTasks = messageTexts.Select(async text =>
        {
            try
            {
                string message = await publisher.PublishAsync(text);
                Console.WriteLine($"Published message {message}");
                Interlocked.Increment(ref publishedMessageCount);
            }
            catch (Exception exception)
            {
                Console.WriteLine($"An error occurred when publishing message {text}: {exception.Message}");
            }
        });
        await Task.WhenAll(publishTasks);
        // PublisherClient instance should be shutdown after use.
        // The TimeSpan specifies for how long to attempt to publish locally queued messages.
        await publisher.ShutdownAsync(TimeSpan.FromSeconds(15));
        return publishedMessageCount;