全部产品
Search
文档中心

ApsaraMQ for RocketMQ:Kode contoh

更新时间:Jul 02, 2025

ApsaraMQ for RocketMQ instance 5.x kompatibel dengan klien yang menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET. Topik ini menyediakan kode contoh untuk mengirim dan menerima pesan menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET.

Penting
  • Disarankan untuk menggunakan RocketMQ 5.x SDK terbaru. SDK ini sepenuhnya kompatibel dengan ApsaraMQ for RocketMQ broker 5.x serta menawarkan lebih banyak fungsi dan fitur yang ditingkatkan. Untuk informasi lebih lanjut, lihat Deskripsi Versi.

  • Alibaba Cloud hanya mendukung pemeliharaan RocketMQ 3.x, 4.x, dan TCP client SDK. Disarankan untuk hanya menggunakannya pada bisnis yang sudah ada.

Mengirim dan menerima pesan normal

Mengirim pesan normal

menggunakan System;
menggunakan ons;

public class ProducerExampleForEx
{
    public ProducerExampleForEx()
    {
    }

    static void Main(string[] args) { 
        ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
        /**
        * Jika Anda menggunakan titik akhir publik untuk mengakses instance ApsaraMQ for RocketMQ, Anda harus mengonfigurasi parameter AccessKey dan SecretKey. Nilai parameter AccessKey adalah nama pengguna instance, dan nilai parameter SecretKey adalah kata sandi instance. Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
        * Catatan: Jangan masukkan pasangan AccessKey dari akun Alibaba Cloud Anda.
        * Jika klien instance ApsaraMQ for RocketMQ ditempatkan pada instance ECS dan Anda ingin mengakses instance ApsaraMQ for RocketMQ di jaringan internal, Anda tidak perlu menentukan nama pengguna atau kata sandi instance. Broker ApsaraMQ for RocketMQ secara otomatis mendapatkan nama pengguna dan kata sandi berdasarkan informasi VPC.
        * Jika instance tersebut adalah instance serverless ApsaraMQ for RocketMQ, Anda harus menentukan nama pengguna dan kata sandi untuk mengakses instance melalui Internet. Jika Anda mengaktifkan fitur bebas autentikasi di VPC untuk instance serverless dan mengakses instance di VPC, Anda tidak perlu menentukan nama pengguna atau kata sandi.
        */  
        // Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "NAMA PENGGUNA INSTANCE");
        factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "KATA SANDI INSTANCE" );
        // Catatan: Jika Anda menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET untuk mengakses instance ApsaraMQ for RocketMQ 5.x, Anda tidak perlu menentukan ID instance. Jika tidak, akses akan gagal.
        
        // ID grup yang Anda buat di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "GID_example");
        // Topik yang Anda buat di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
        // Titik akhir yang Anda peroleh di konsol ApsaraMQ for RocketMQ. Nilainya dalam format serupa dengan rmq-cn-XXXX.rmq.aliyuncs.com:8080.
        // Catatan: Masukkan nama domain dan nomor port yang ditampilkan di konsol ApsaraMQ for RocketMQ. Jangan tambahkan awalan http:// atau https:// atau gunakan alamat IP yang telah diselesaikan.
        factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "TITIK AKHIR"); 
        // Jalur log.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");

        // Buat instance produser.
        // Catatan: Instance produser aman-thread dan dapat digunakan untuk mengirim pesan dari topik yang berbeda. Dalam kebanyakan kasus, setiap thread hanya memerlukan satu instance produser.
        Producer producer = ONSFactory.getInstance().createProducer(factoryInfo);

        // Mulai instance produser.
        producer.start();

        // Buat pesan.
        Message msg = new Message(factoryInfo.getPublishTopics(), "tagA", "Contoh isi pesan");
        msg.setKey(Guid.NewGuid().ToString());
        for (int i = 0; i < 32; i++) {
            try
            {
                SendResultONS sendResult = producer.send(msg);
                Console.WriteLine("pengiriman berhasil {0}", sendResult.getMessageId());
            }
            catch (Exception ex)
            {
                Console.WriteLine("pengiriman gagal{0}", ex.ToString());
            }
        }

        // Sebelum keluar dari thread Anda, matikan instance produser.
        producer.shutdown();

    }
}    

Berlangganan pesan normal

menggunakan System;
menggunakan System.Threading;
menggunakan System.Text;
menggunakan ons;

// Fungsi callback yang dieksekusi ketika pesan ditarik di broker ApsaraMQ for RocketMQ.
public class MyMsgListener : MessageListener
{
    public MyMsgListener()
    {
    }

    ~MyMsgListener()
    {
    }

    public override ons.Action consume(Message value, ConsumeContext context)
    {
        Byte[] text = Encoding.Default.GetBytes(value.getBody());
        Console.WriteLine(Encoding.UTF8.GetString(text));
        return ons.Action.CommitMessage;
    }
}

public class ConsumerExampleForEx
{
    public ConsumerExampleForEx()
    {
    }

    static void Main(string[] args) {
        ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
        /**
        * Jika Anda menggunakan titik akhir publik untuk mengakses instance ApsaraMQ for RocketMQ, Anda harus mengonfigurasi parameter AccessKey dan SecretKey. Nilai parameter AccessKey adalah nama pengguna instance, dan nilai parameter SecretKey adalah kata sandi instance. Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
        * Catatan: Jangan masukkan pasangan AccessKey dari akun Alibaba Cloud Anda.
        * Jika klien instance ApsaraMQ for RocketMQ ditempatkan pada instance ECS dan Anda ingin mengakses instance ApsaraMQ for RocketMQ di jaringan internal, Anda tidak perlu menentukan nama pengguna atau kata sandi instance. Broker secara otomatis mendapatkan nama pengguna dan kata sandi berdasarkan informasi VPC.
        * Jika instance tersebut adalah instance serverless ApsaraMQ for RocketMQ, Anda harus menentukan nama pengguna dan kata sandi untuk mengakses instance melalui Internet. Jika Anda mengaktifkan fitur bebas autentikasi di VPC untuk instance serverless dan mengakses instance di VPC, Anda tidak perlu menentukan nama pengguna atau kata sandi.
        */  
        // Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "NAMA PENGGUNA INSTANCE");
        factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "KATA SANDI INSTANCE" );
        // Catatan: Jika Anda menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET untuk mengakses instance ApsaraMQ for RocketMQ 5.x, Anda tidak perlu menentukan ID instance. Jika tidak, akses akan gagal.
        
        // ID grup konsumen yang Anda buat di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.ConsumerId, "GID_example");
        // Topik yang Anda buat di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
        // Titik akhir TCP. Anda dapat memperoleh titik akhir di bagian Endpoint TCP halaman Detail Instance di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.NAMESRV_ADDR, "NameSrv_Addr");
        // Jalur log.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");
        // Konsumsi kluster.
        // factoryInfo.setFactoryProperty(ONSFactoryProperty:: MessageModel, ONSFactoryProperty.CLUSTERING);
        // Konsumsi penyiaran.
        // factoryInfo.setFactoryProperty(ONSFactoryProperty:: MessageModel, ONSFactoryProperty.BROADCASTING);

        // Buat instance konsumen.
        PushConsumer consumer = ONSFactory.getInstance().createPushConsumer(factoryInfo);

        // Berlangganan ke topik.
        consumer.subscribe(factoryInfo.getPublishTopics(), "*", new MyMsgListener());

        // Mulai instance konsumen.
        consumer.start();

        // Pengaturan ini hanya digunakan dalam demo ini. Di lingkungan produksi sebenarnya, Anda tidak dapat keluar dari proses.
        Thread.Sleep(300000);

        // Sebelum keluar dari proses, matikan instance konsumen.
        consumer.shutdown();
    }
}

Mengirim dan menerima pesan terurut

Mengirim pesan terurut

menggunakan System;
menggunakan ons;

public class OrderProducerExampleForEx
{
    public OrderProducerExampleForEx()
    {
    }

    static void Main(string[] args) {
        ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
        /**
        * Jika Anda menggunakan titik akhir publik untuk mengakses instance ApsaraMQ for RocketMQ, Anda harus mengonfigurasi parameter AccessKey dan SecretKey. Nilai parameter AccessKey adalah nama pengguna instance, dan nilai parameter SecretKey adalah kata sandi instance. Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
        * Catatan: Jangan masukkan pasangan AccessKey dari akun Alibaba Cloud Anda.
        * Jika klien instance ApsaraMQ for RocketMQ ditempatkan pada instance ECS dan Anda ingin mengakses instance ApsaraMQ for RocketMQ di jaringan internal, Anda tidak perlu menentukan nama pengguna atau kata sandi instance. Broker secara otomatis mendapatkan nama pengguna dan kata sandi berdasarkan informasi VPC.
        * Jika instance tersebut adalah instance serverless ApsaraMQ for RocketMQ, Anda harus menentukan nama pengguna dan kata sandi untuk mengakses instance melalui Internet. Jika Anda mengaktifkan fitur bebas autentikasi di VPC untuk instance serverless dan mengakses instance di VPC, Anda tidak perlu menentukan nama pengguna atau kata sandi.
        */  
        // Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "NAMA PENGGUNA INSTANCE");
        factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "KATA SANDI INSTANCE" );
        // Catatan: Jika Anda menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET untuk mengakses instance ApsaraMQ for RocketMQ 5.x, Anda tidak perlu menentukan ID instance. Jika tidak, akses akan gagal.
        
        // ID grup yang Anda buat di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "GID_example");
        // Topik yang Anda buat di konsol ApsaraMQ for RocketMQ.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
        // Titik akhir yang Anda peroleh di konsol ApsaraMQ for RocketMQ. Nilainya dalam format serupa dengan rmq-cn-XXXX.rmq.aliyuncs.com:8080.
        // Catatan: Masukkan nama domain dan nomor port yang ditampilkan di konsol ApsaraMQ for RocketMQ. Jangan tambahkan awalan http:// atau https:// atau gunakan alamat IP yang telah diselesaikan.
        factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "TITIK AKHIR"); 
        // Jalur log.
        factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");

        // Buat instance produser.
        // Catatan: Instance produser aman-thread dan dapat digunakan untuk mengirim pesan dari topik yang berbeda. Dalam kebanyakan kasus, setiap thread hanya memerlukan satu instance produser.
        OrderProducer producer = ONSFactory.getInstance().createOrderProducer(factoryInfo);

        // Mulai instance produser.
        producer.start();

        // Buat pesan.
        Message msg = new Message(factoryInfo.getPublishTopics(), "tagA", "Contoh isi pesan");
        string shardingKey = "App-Test";
        for (int i = 0; i < 32; i++) {
            try
            {
                SendResultONS sendResult = producer.send(msg, shardingKey);
                Console.WriteLine("pengiriman berhasil {0}", sendResult.getMessageId());
            }
            catch (Exception ex)
            {
                Console.WriteLine("pengiriman gagal{0}", ex.ToString());
            }
        }

        // Sebelum keluar dari thread Anda, matikan instance produser.
        producer.shutdown();

    }
}

Berlangganan pesan terurut

menggunakan System;
menggunakan System.Text;
menggunakan System.Threading;
menggunakan ons;

namespace demo
{

    public class MyMsgOrderListener : MessageOrderListener
    {
        public MyMsgOrderListener()
        {

        }

        ~MyMsgOrderListener()
        {
        }

        public override ons.OrderAction consume(Message value, ConsumeOrderContext context)
        {
            Byte[] text = Encoding.Default.GetBytes(value.getBody());
            Console.WriteLine(Encoding.UTF8.GetString(text));
            return ons.OrderAction.Success;
        }
    }

    class OrderConsumerExampleForEx
    {
        static void Main(string[] args)
        {
            ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
            /**
            * Jika Anda menggunakan titik akhir publik untuk mengakses instance ApsaraMQ for RocketMQ, Anda harus mengonfigurasi parameter AccessKey dan SecretKey. Nilai parameter AccessKey adalah nama pengguna instance, dan nilai parameter SecretKey adalah kata sandi instance. Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
            * Catatan: Jangan masukkan pasangan AccessKey dari akun Alibaba Cloud Anda.
            * Jika klien instance ApsaraMQ for RocketMQ ditempatkan pada instance ECS dan Anda ingin mengakses instance ApsaraMQ for RocketMQ di jaringan internal, Anda tidak perlu menentukan nama pengguna atau kata sandi instance. Broker secara otomatis mendapatkan nama pengguna dan kata sandi berdasarkan informasi VPC.
            * Jika instance tersebut adalah instance serverless ApsaraMQ for RocketMQ, Anda harus menentukan nama pengguna dan kata sandi untuk mengakses instance melalui Internet. Jika Anda mengaktifkan fitur bebas autentikasi di VPC untuk instance serverless dan mengakses instance di VPC, Anda tidak perlu menentukan nama pengguna atau kata sandi.
            */  
            // Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
            factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "NAMA PENGGUNA INSTANCE");
            factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "KATA SANDI INSTANCE" );
            // Catatan: Jika Anda menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET untuk mengakses instance ApsaraMQ for RocketMQ 5.x, Anda tidak perlu menentukan ID instance. Jika tidak, akses akan gagal.
            
            // ID grup yang Anda buat di konsol ApsaraMQ for RocketMQ.
            factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "GID_example");
            // Topik yang Anda buat di konsol ApsaraMQ for RocketMQ.
            factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
            // Titik akhir yang Anda peroleh di konsol ApsaraMQ for RocketMQ. Nilainya dalam format serupa dengan rmq-cn-XXXX.rmq.aliyuncs.com:8080.
            // Catatan: Masukkan nama domain dan nomor port yang ditampilkan di konsol ApsaraMQ for RocketMQ. Jangan tambahkan awalan http:// atau https:// atau gunakan alamat IP yang telah diselesaikan.
            factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "TITIK AKHIR"); 
            // Jalur log.
            factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");

            // Buat instance konsumen.
            OrderConsumer consumer = ONSFactory.getInstance().createOrderConsumer(factoryInfo);

            // Berlangganan ke topik.
            consumer.subscribe(factoryInfo.getPublishTopics(), "*",new MyMsgOrderListener());

            // Mulai instance konsumen.
            consumer.start();

            // Aktifkan thread utama untuk tidur selama periode waktu tertentu.
            Thread.Sleep(30000);

            // Jika instance konsumen tidak lagi digunakan, matikan instance konsumen.
            consumer.shutdown();
        }
    }
}

Mengirim dan menerima pesan terjadwal atau tertunda

Mengirim pesan terjadwal atau tertunda

menggunakan System;
menggunakan System.Collections.Generic;
menggunakan System.Linq;
menggunakan System.Text;
menggunakan System.Runtime.InteropServices;
menggunakan ons;

namespace ons
{
    class onscsharp
    {
        static void Main(string[] args)
        {
            // Tetapkan parameter yang diperlukan untuk membuat dan menggunakan produser.
            ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
            // ID grup yang Anda buat di konsol ApsaraMQ for RocketMQ.
            factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "XXX ");
            // Titik akhir yang Anda peroleh di konsol ApsaraMQ for RocketMQ. Nilainya dalam format serupa dengan rmq-cn-XXXX.rmq.aliyuncs.com:8080.
            // Catatan: Masukkan nama domain dan nomor port yang ditampilkan di konsol ApsaraMQ for RocketMQ. Jangan tambahkan awalan http:// atau https:// atau gunakan alamat IP yang telah diselesaikan.
            factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "TITIK AKHIR");
            // Topik yang Anda buat di konsol ApsaraMQ for RocketMQ.
            factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "XXX");
            // Isi pesan.
            factoryInfo.setFactoryProperty(ONSFactoryProperty.MsgContent, "XXX");
            /**
            * Jika Anda menggunakan titik akhir publik untuk mengakses instance ApsaraMQ for RocketMQ, Anda harus mengonfigurasi parameter AccessKey dan SecretKey. Nilai parameter AccessKey adalah nama pengguna instance, dan nilai parameter SecretKey adalah kata sandi instance. Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
            * Catatan: Jangan masukkan pasangan AccessKey dari akun Alibaba Cloud Anda.
            * Jika klien instance ApsaraMQ for RocketMQ ditempatkan pada instance ECS dan Anda ingin mengakses instance ApsaraMQ for RocketMQ di jaringan internal, Anda tidak perlu menentukan nama pengguna atau kata sandi instance. Broker secara otomatis mendapatkan nama pengguna dan kata sandi berdasarkan informasi VPC.
            * Jika instance tersebut adalah instance serverless ApsaraMQ for RocketMQ, Anda harus menentukan nama pengguna dan kata sandi untuk mengakses instance melalui Internet. Jika Anda mengaktifkan fitur bebas autentikasi di VPC untuk instance serverless dan mengakses instance di VPC, Anda tidak perlu menentukan nama pengguna atau kata sandi.
            */  
            // Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
            factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "NAMA PENGGUNA INSTANCE");
            factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "KATA SANDI INSTANCE" );
            // Catatan: Jika Anda menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET untuk mengakses instance ApsaraMQ for RocketMQ 5.x, Anda tidak perlu menentukan ID instance. Jika tidak, akses akan gagal.

            //Buat produser.
            Producer pProducer = ONSFactory.getInstance().createProducer(factoryInfo);

            // Sebelum Anda mengirim pesan, panggil metode start() sekali saja untuk memulai produser.
            pProducer.start();

            Message msg = new Message(
                // Topik pesan.
                factoryInfo.getPublishTopics(),
                // Tag pesan.
                "TagA",
                // Isi pesan.
                factoryInfo.getMessageContent()
            );

            // Kunci pesan. Kunci adalah atribut spesifik bisnis dari pesan dan harus unik secara global jika memungkinkan.
            // Jika Anda tidak dapat menerima pesan seperti yang diharapkan, Anda dapat menggunakan kunci untuk mencari pesan di konsol ApsaraMQ for RocketMQ.
            // Catatan: Pesan masih dapat dikirim dan diterima meskipun Anda tidak menentukan kunci.
            msg.setKey("ORDERID_100");

            // Waktu pengiriman. Unit: milidetik. Pesan hanya dikonsumsi setelah waktu yang ditentukan. Dalam contoh ini, pesan dikonsumsi setelah 3 detik.
            long deliverTime = System.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, matikan produser. Jika Anda tidak mematikan produser, masalah seperti kebocoran memori mungkin terjadi.
            pProducer.shutdown();

        }
 }
}           

Berlangganan pesan terjadwal atau tertunda

Kode contoh untuk berlangganan pesan terjadwal atau tertunda sama dengan kode contoh untuk berlangganan pesan normal. Untuk informasi lebih lanjut, lihat Berlangganan Pesan Normal.

Mengirim dan menerima pesan transaksional

Mengirim pesan transaksional

  1. Kirim pesan setengah dan jalankan transaksi lokal yang sesuai. Kode contoh:

     menggunakan System;
     menggunakan System.Collections.Generic;
     menggunakan System.Linq;
     menggunakan System.Text;
     menggunakan System.Runtime.InteropServices;
     menggunakan ons;
    
     namespace ons
     {
     public class MyLocalTransactionExecuter : LocalTransactionExecuter
     {
         public MyLocalTransactionExecuter()
         {
         }
    
         ~MyLocalTransactionExecuter()
         {
         }
         public override TransactionStatus execute(Message value)
         {
                 Console.WriteLine("eksekusi topik: {0}, tag:{1}, key:{2}, msgId:{3},msgbody:{4}, userProperty:{5}",
                 value.getTopic(), value.getTag(), value.getKey(), value.getMsgID(), value.getBody(), value.getUserProperty("VincentNoUser"));
    
                 // ID pesan. Dua pesan dapat memiliki tubuh pesan yang sama tetapi tidak ID yang sama. Anda tidak dapat meminta ID pesan saat ini di konsol ApsaraMQ for RocketMQ.
                 string msgId = value.getMsgID();
                 // Hitung tubuh pesan menggunakan algoritma seperti CRC32 dan MD5.
                 // ID pesan dan ID CRC32 digunakan untuk mencegah pesan duplikat.
                 // Untuk mencegah pesan duplikat, hitung tubuh pesan menggunakan algoritma CRC32 atau MD5.
    
                 TransactionStatus transactionStatus = TransactionStatus.Unknow;
                 try {
                     boolean isCommit = Hasil eksekusi transaksi lokal;
                     if (isCommit) {
                         // Komit pesan jika transaksi lokal berhasil.
                         transactionStatus = TransactionStatus.CommitTransaction;
                     } else {
                         // Gulung balik pesan jika transaksi lokal gagal.
                         transactionStatus = TransactionStatus.RollbackTransaction;
                     }
                 } catch (Exception e) {
                     // Logika untuk menangani pengecualian.
                 }
                 return transactionStatus;
         }
     }
     class onscsharp
     {
    
         static void Main(string[] args)
         {
             ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
             // Titik akhir yang Anda peroleh di konsol ApsaraMQ for RocketMQ. Nilainya dalam format serupa dengan rmq-cn-XXXX.rmq.aliyuncs.com:8080.
             // Catatan: Masukkan nama domain dan nomor port yang ditampilkan di konsol ApsaraMQ for RocketMQ. Jangan tambahkan awalan http:// atau https:// atau gunakan alamat IP yang telah diselesaikan.
             factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "TITIK AKHIR");
             // Topik yang Anda buat di konsol ApsaraMQ for RocketMQ.
             factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "");
             // Isi pesan.
             factoryInfo.setFactoryProperty(ONSFactoryProperty.MsgContent, "");
             /**
              * Jika Anda menggunakan titik akhir publik untuk mengakses instance ApsaraMQ for RocketMQ, Anda harus mengonfigurasi parameter AccessKey dan SecretKey. Nilai parameter AccessKey adalah nama pengguna instance, dan nilai parameter SecretKey adalah kata sandi instance. Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
              * Catatan: Jangan masukkan pasangan AccessKey dari akun Alibaba Cloud Anda.
              * Jika klien instance ApsaraMQ for RocketMQ ditempatkan pada instance ECS dan Anda ingin mengakses instance ApsaraMQ for RocketMQ di jaringan internal, Anda tidak perlu menentukan nama pengguna atau kata sandi instance. Broker secara otomatis mendapatkan nama pengguna dan kata sandi berdasarkan informasi VPC.
              * Jika instance tersebut adalah instance serverless ApsaraMQ for RocketMQ, Anda harus menentukan nama pengguna dan kata sandi untuk mengakses instance melalui Internet. Jika Anda mengaktifkan fitur bebas autentikasi di VPC untuk instance serverless dan mengakses instance di VPC, Anda tidak perlu menentukan nama pengguna atau kata sandi.
              */  
              // Anda dapat memperoleh nama pengguna dan kata sandi di tab Otentikasi Cerdas halaman Kontrol Akses yang sesuai dengan instance di konsol ApsaraMQ for RocketMQ.
              factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "NAMA PENGGUNA INSTANCE");
              factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "KATA SANDI INSTANCE" );
              // Catatan: Jika Anda menggunakan RocketMQ 1.x atau 2.x SDK untuk .NET untuk mengakses instance ApsaraMQ for RocketMQ 5.x, Anda tidak perlu menentukan ID instance. Jika tidak, akses akan gagal.
    
             // Buat produser transaksi.        
             LocalTransactionChecker myChecker = new MyLocalTransactionChecker();
             TransactionProducer pProducer =ONSFactory.getInstance().createTransactionProducer(factoryInfo,ref myChecker);
    
             // Sebelum Anda menggunakan produser untuk mengirim pesan, panggil metode start() sekali saja untuk memulai produser. Setelah produser dimulai, pesan dapat dikirim secara bersamaan di beberapa thread.
             pProducer.start();
    
                 Message msg = new Message(
                 //Topik Pesan
                 factoryInfo.getPublishTopics(),
                 //Tag Pesan
                 "TagA",
                 //Isi Pesan
                 factoryInfo.getMessageContent()
             );
    
             // Kunci pesan. Kunci adalah atribut spesifik bisnis dari pesan dan harus unik secara global jika memungkinkan.
             // Jika Anda tidak dapat menerima pesan seperti yang diharapkan, Anda dapat menggunakan kunci untuk mencari pesan di konsol ApsaraMQ for RocketMQ.
             // Catatan: Pesan masih dapat dikirim dan diterima meskipun Anda tidak menentukan kunci.
             msg.setKey("ORDERID_100");
    
             // Kirim pesan. Jika tidak ada pengecualian yang dilemparkan, pesan terkirim.
             try
             {
                 LocalTransactionExecuter myExecuter = new MyLocalTransactionExecuter();
                 SendResultONS sendResult = pProducer.send(msg, ref myExecuter);
             }
             catch(ONSClientException e)
             {
                 Console.WriteLine("\npengecualian dari sendmsg:{0}",e.what() );
             }
    
             // Sebelum Anda keluar dari aplikasi, matikan produser. Jika Anda tidak mematikan produser, masalah seperti kebocoran memori mungkin terjadi.
             // Produser tidak dapat dimulai ulang setelah dimatikan.
             pProducer.shutdown();
         }
     }
     }
  2. Komit status pesan transaksional. Kode contoh:

    public class MyLocalTransactionChecker : LocalTransactionChecker
    {
        public MyLocalTransactionChecker()
        {
        }
        ~MyLocalTransactionChecker()
        {
        }
        public override TransactionStatus check(Message value)
        {
                Console.WriteLine("cek topik: {0}, tag:{1}, key:{2}, msgId:{3},msgbody:{4}, userProperty:{5}",
                value.getTopic(), value.getTag(), value.getKey(), value.getMsgID(), value.getBody(), value.getUserProperty("VincentNoUser"));
                // ID pesan. Dua pesan dapat memiliki tubuh pesan yang sama tetapi tidak ID yang sama. Anda tidak dapat meminta ID pesan saat ini di konsol ApsaraMQ for RocketMQ.
                string msgId = value.getMsgID();
                // Hitung tubuh pesan menggunakan algoritma seperti CRC32 dan MD5.
                // ID pesan dan ID CRC32 digunakan untuk mencegah pesan duplikat.
                // Jika bisnis Anda bersifat idempoten, Anda tidak perlu menentukan ID pesan atau ID CRC32. Jika tidak, tentukan ID pesan atau ID CRC32 untuk memastikan idempotensi.
                // Untuk mencegah pesan duplikat, hitung tubuh pesan menggunakan algoritma CRC32 atau MD5.
                TransactionStatus transactionStatus = TransactionStatus.Unknow;
                try {
                    boolean isCommit = Hasil eksekusi transaksi lokal;
                    if (isCommit) {
                        // Komit pesan jika transaksi lokal berhasil.
                        transactionStatus = TransactionStatus.CommitTransaction;
                    } else {
                        // Gulung balik pesan jika transaksi lokal gagal.
                        transactionStatus = TransactionStatus.RollbackTransaction;
                    }
                } catch (Exception e) {
                    //penanganan pengecualian
                }
                return transactionStatus;
        }
        }

Berlangganan pesan transaksional

Kode contoh untuk berlangganan pesan transaksional sama dengan kode contoh untuk berlangganan pesan normal. Untuk informasi lebih lanjut, lihat Berlangganan Pesan Normal.