Topik ini menyajikan contoh kode untuk mengirim dan menerima pesan terjadwal menggunakan SDK klien TCP untuk C atau C++.
Pesan terjadwal dikonsumsi setelah waktu tertentu yang telah ditentukan. Pesan ini berguna dalam skenario yang memerlukan jeda waktu antara produksi dan konsumsi, atau ketika tugas terjadwal diaktifkan melalui pesan.
Untuk detail tentang terminologi dan langkah pencegahan saat menggunakan pesan terjadwal, lihat Pesan Terjadwal dan Pesan Tertunda.
Prasyarat
Sebelum memulai, pastikan langkah-langkah berikut telah dilakukan:
SDK untuk C atau C++ telah diunduh. Untuk informasi lebih lanjut, lihat Catatan Rilis.
Lingkungan telah disiapkan. Untuk informasi lebih lanjut, lihat Persiapan Lingkungan (V1.x.x).
Sumber daya yang ingin Anda tentukan dalam kode telah dibuat di Konsol ApsaraMQ for RocketMQ. Sumber daya tersebut mencakup instance, topik, dan grup konsumen. Untuk informasi lebih lanjut, lihat Buat Sumber Daya.
Pasangan AccessKey akun Alibaba Cloud Anda telah diperoleh. Untuk informasi lebih lanjut, lihat Buat Pasangan AccessKey.
Kirim pesan terjadwal
Contoh kode berikut menunjukkan cara mengirim pesan terjadwal menggunakan SDK klien TCP untuk Java:
#include "ONSFactory.h"
#include "ONSClientException.h"
#include <windows.h>
using namespace ons;
int main()
{
// Buat produsen dan konfigurasikan parameter yang diperlukan untuk mengirim pesan.
ONSFactoryProperty factoryInfo;
// ID grup konsumen yang Anda buat di konsol ApsaraMQ for RocketMQ.
factoryInfo.setFactoryProperty(ONSFactoryProperty::ProducerId, "XXX");
// Titik akhir TCP. Anda dapat memperoleh titik akhir di bagian TCP Endpoint halaman Detail Instance di konsol ApsaraMQ for RocketMQ.
factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "XXX");
// Topik yang Anda buat di konsol ApsaraMQ for RocketMQ.
factoryInfo.setFactoryProperty(ONSFactoryProperty::PublishTopics,"XXX" );
// Isi pesan.
factoryInfo.setFactoryProperty(ONSFactoryProperty::MsgContent, "XXX");
// Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi.
// ID AccessKey yang digunakan untuk autentikasi.
factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// Rahasia AccessKey yang digunakan untuk autentikasi.
factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Buat produsen;
Producer *pProducer = ONSFactory::getInstance()->createProducer(factoryInfo);
// Sebelum mengirim pesan, panggil metode start() hanya sekali untuk memulai produsen.
pProducer->start();
Message msg(
// Topik Pesan
factoryInfo.getPublishTopics(),
// Tag pesan. Tag pesan mirip dengan tag di Gmail dan digunakan oleh konsumen untuk menyaring pesan pada broker ApsaraMQ for RocketMQ.
"TagA",
// Tubuh pesan. Parameter ini tidak boleh kosong. ApsaraMQ for RocketMQ tidak memproses tubuh pesan. Produsen dan konsumen harus sepakat pada metode yang digunakan untuk serialisasi dan deserialisasi tubuh pesan.
factoryInfo.getMessageContent()
);
// Kunci pesan. Kunci adalah atribut spesifik bisnis dari sebuah pesan dan harus unik secara global jika memungkinkan.
// Jika Anda tidak dapat menerima pesan seperti yang diharapkan, Anda dapat menggunakan kunci untuk menanyakan pesan di konsol ApsaraMQ for RocketMQ.
// Catatan: Anda dapat mengirim dan menerima pesan meskipun Anda tidak menentukan kunci.
msg.setKey("ORDERID_100");
// Waktu setelah broker mengirimkan pesan ke konsumen. Unit: milidetik. Pesan hanya dapat dikonsumsi setelah waktu yang ditentukan berlalu. Dalam contoh ini, pesan dapat dikonsumsi setelah penundaan 3 detik.
long deliverTime = GetTickCount64() + 3000;
msg.setStartDeliverTime(deliverTime);
// Kirim pesan. Jika tidak ada pengecualian yang dilemparkan, pesan terkirim.
try
{
SendResultONS sendResult = pProducer->send(msg);
}
catch(ONSClientException & e)
{
// Tentukan logika untuk menangani pengecualian.
}
// Sebelum keluar dari aplikasi, hancurkan produsen. Jika tidak, masalah seperti kebocoran memori akan terjadi.
pProducer->shutdown();
return 0;
}
Berlangganan pesan terjadwal
Contoh kode untuk berlangganan pesan terjadwal sama dengan berlangganan pesan normal. Untuk informasi lebih lanjut, lihat Berlangganan Pesan.