Topik ini memberikan contoh kode untuk mengirim dan menerima pesan terjadwal menggunakan SDK klien TCP untuk .NET. Pesan terjadwal didukung di wilayah Internet, Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), dan Tiongkok (Shenzhen).
Pesan terjadwal dikonsumsi setelah cap waktu yang telah ditentukan. Pesan ini dapat digunakan dalam skenario yang memerlukan jendela waktu antara produksi dan konsumsi pesan atau dalam skenario di mana tugas terjadwal dipicu oleh pesan.
Untuk informasi lebih lanjut tentang istilah yang digunakan untuk pesan terjadwal dan tindakan pencegahan yang perlu diperhatikan, lihat Pesan Terjadwal dan Pesan Tertunda.
Prasyarat
SDK untuk .NET telah diunduh. Untuk informasi lebih lanjut, lihat Catatan Rilis.
Lingkungan telah disiapkan. Untuk informasi lebih lanjut, lihat Persiapkan Lingkungan.
Sumber daya yang ingin Anda tentukan dalam kode 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 dari akun Alibaba Cloud Anda telah diperoleh. Untuk informasi lebih lanjut, lihat Buat Pasangan AccessKey.
Kirim pesan terjadwal
Untuk informasi tentang contoh kode, lihat Repositori Kode ApsaraMQ for RocketMQ.
Contoh kode berikut menunjukkan cara mengirim pesan terjadwal menggunakan SDK klien HTTP untuk .NET:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using ons;
namespace ons
{
class onscsharp
{
private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static long CurrentTimeMillis()
{
return (long) (DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
static void Main(string[] args)
{
// Parameter yang diperlukan untuk membuat dan menggunakan produser.
ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
// 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 otentikasi.
factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
// Rahasia AccessKey yang digunakan untuk otentikasi.
factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Buat produser.
Producer pProducer = ONSFactory.getInstance().createProducer(factoryInfo);
// Sebelum Anda mengirim pesan, panggil metode start() hanya sekali untuk memulai produser.
pProducer.start();
Message msg = new Message(
// Topik pesan.
factoryInfo.getPublishTopics(),
// Tag pesan.
"TagA",
// 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 bahkan jika Anda tidak menentukan kunci.
msg.setKey("ORDERID_100");
// Waktu pengiriman. Unit: ms. Pesan hanya dikonsumsi setelah waktu yang ditentukan. Dalam contoh ini, pesan dikonsumsi setelah 3 detik.
long deliverTime = CurrentTimeMillis() + 3000;
msg.setStartDeliverTime(deliverTime);
// Kirim pesan. Jika tidak ada pengecualian yang dilemparkan, pesan terkirim.
try
{
SendResultONS sendResult = pProducer.send(msg);
}
catch(ONSClientException e)
{
// Logika untuk menangani kegagalan.
}
// Sebelum Anda keluar dari aplikasi Anda, hancurkan produser. Jika Anda tidak menghancurkan produser, masalah seperti kebocoran memori mungkin terjadi.
pProducer.shutdown();
}
}
} Berlangganan pesan terjadwal
Contoh kode untuk berlangganan pesan terjadwal sama dengan berlangganan pesan normal. Untuk informasi lebih lanjut, lihat Berlangganan Pesan.