日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

示例代碼

云消息隊列 RocketMQ 版5.x版本實例可兼容.NET 1.x/2.x SDK客戶端接入,您可以使用1.x/2.x版本的SDK接入5.x實例進行消息收發。本文為您介紹1.x/2.x版本下的.NET SDK消息收發示例代碼。

重要
  • 推薦您使用最新的RocketMQ 5.x系列SDK,5.x系列SDK作為主力研發版本,和云消息隊列 RocketMQ 版5.x服務端完全兼容,提供了更全面的功能并支持更多增強特性。更多信息,請參見5.x系列SDK
  • RocketMQ 4.x/3.x系列SDK和ONS系列SDK后續僅做功能維護,建議僅存量業務使用。

普通消息收發示例

發送普通消息

using System;
using ons;

public class ProducerExampleForEx
{
    public ProducerExampleForEx()
    {
    }

    static void Main(string[] args) { 
        ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
        /**
        * 如果是使用公網接入點訪問,則必須設置AccessKey和SecretKey,里面填寫實例的用戶名和密碼。實例用戶名和密碼在控制臺訪問控制的智能身份識別頁簽中獲取。
        * 注意!!!這里填寫的不是阿里云賬號的AccessKey ID和AccessKey Secret,請務必區分開。
        * 如果是在阿里云ECS內網訪問,則無需配置,服務端會根據內網VPC信息智能獲取。
        * 如果實例類型為Serverless實例,公網訪問必須設置實例的用戶名密碼,當開啟內網免身份識別時,內網訪問可以不設置用戶名和密碼。
        */  
        // 實例用戶名和密碼在消息隊列RocketMQ版控制臺訪問控制的智能身份識別頁簽中獲取。
        factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "INSTANCE USER NAME");
        factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "INSTANCE PASSWORD" );
        // 注意!!!訪問RocketMQ 5.x實例時,InstanceID屬性不需要設置,否則會導致失敗。
        
        // 設置為您在消息隊列RocketMQ版控制臺創建的Group ID。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "GID_example");
        // 您在消息隊列RocketMQ版控制臺創建的Topic。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
        // 設置為您從消息隊列RocketMQ版控制臺獲取的接入點信息,類似“rmq-cn-XXXX.rmq.aliyuncs.com:8080”。
        // 注意!!!直接填寫控制臺提供的域名和端口即可,請勿添加http://或https://前綴標識,也不要用IP解析地址。
        factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "ACCESS POINT"); 
        // 設置日志路徑。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");

        // 創建生產者實例。
        // 說明:生產者實例是線程安全的,可用于發送不同Topic的消息。基本上,您每一個線程只需要一個生產者實例。
        Producer producer = ONSFactory.getInstance().createProducer(factoryInfo);

        // 啟動客戶端實例。
        producer.start();

        // 創建消息對象。
        Message msg = new Message(factoryInfo.getPublishTopics(), "tagA", "Example message body");
        msg.setKey(Guid.NewGuid().ToString());
        for (int i = 0; i < 32; i++) {
            try
            {
                SendResultONS sendResult = producer.send(msg);
                Console.WriteLine("send success {0}", sendResult.getMessageId());
            }
            catch (Exception ex)
            {
                Console.WriteLine("send failure{0}", ex.ToString());
            }
        }

        // 在您的線程即將退出時,關閉生產者實例。
        producer.shutdown();

    }
}    

訂閱普通消息

using System;
using System.Threading;
using System.Text;
using ons;

// 從Broker拉取消息時要執行的回調函數。
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();
        /**
        * 如果是使用公網接入點訪問,則必須設置AccessKey和SecretKey,里面填寫實例的用戶名和密碼。實例用戶名和密碼在控制臺訪問控制的智能身份識別頁簽中獲取。
        * 注意!!!這里填寫的不是阿里云賬號的AccessKey ID和AccessKey Secret,請務必區分開。
        * 如果是在阿里云ECS內網訪問,則無需配置,服務端會根據內網VPC信息智能獲取。
        * 如果實例類型為Serverless實例,公網訪問必須設置實例的用戶名密碼,當開啟內網免身份識別時,內網訪問可以不設置用戶名和密碼。
        */  
        // 實例用戶名和密碼在消息隊列RocketMQ版控制臺訪問控制的智能身份識別頁簽中獲取。
        factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "INSTANCE USER NAME");
        factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "INSTANCE PASSWORD" );
        // 注意!!!訪問RocketMQ 5.x實例時,InstanceID屬性不需要設置,否則會導致失敗。
        
        // 您在消息隊列RocketMQ版控制臺創建的Group ID。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.ConsumerId, "GID_example");
        // 您在消息隊列RocketMQ版控制臺創建的Topic。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
        // 設置TCP接入域名,進入消息隊列RocketMQ版控制臺實例詳情頁面的接入點區域查看。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.NAMESRV_ADDR, "NameSrv_Addr");
        // 設置日志路徑。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");
        // 集群消費。
        // factoryInfo.setFactoryProperty(ONSFactoryProperty:: MessageModel, ONSFactoryProperty.CLUSTERING);
        // 廣播消費。
        // factoryInfo.setFactoryProperty(ONSFactoryProperty:: MessageModel, ONSFactoryProperty.BROADCASTING);

        // 創建消費者實例。
        PushConsumer consumer = ONSFactory.getInstance().createPushConsumer(factoryInfo);

        // 訂閱Topic。
        consumer.subscribe(factoryInfo.getPublishTopics(), "*", new MyMsgListener());

        // 啟動客戶端實例。
        consumer.start();

        // 該設置僅供Demo使用,實際生產環境中請保證進程不退出。
        Thread.Sleep(300000);

        // 在進程即將退出時,關閉消費者實例。
        consumer.shutdown();
    }
}

順序消息收發示例

發送順序消息

using System;
using ons;

public class OrderProducerExampleForEx
{
    public OrderProducerExampleForEx()
    {
    }

    static void Main(string[] args) {
        ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
        /**
        * 如果是使用公網接入點訪問,則必須設置AccessKey和SecretKey,里面填寫實例的用戶名和密碼。實例用戶名和密碼在控制臺訪問控制的智能身份識別頁簽中獲取。
        * 注意!!!這里填寫的不是阿里云賬號的AccessKey ID和AccessKey Secret,請務必區分開。
        * 如果是在阿里云ECS內網訪問,則無需配置,服務端會根據內網VPC信息智能獲取。
        * 如果實例類型為Serverless實例,公網訪問必須設置實例的用戶名密碼,當開啟內網免身份識別時,內網訪問可以不設置用戶名和密碼。
        */  
        // 實例用戶名和密碼在消息隊列RocketMQ版控制臺訪問控制的智能身份識別頁簽中獲取。
        factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "INSTANCE USER NAME");
        factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "INSTANCE PASSWORD" );
        // 注意!!!訪問RocketMQ 5.x實例時,InstanceID屬性不需要設置,否則會導致失敗。
        
        // 設置為您在消息隊列RocketMQ版控制臺創建的Group ID。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "GID_example");
        // 您在消息隊列RocketMQ版控制臺創建的Topic。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
        // 設置為您從消息隊列RocketMQ版控制臺獲取的接入點信息,類似“rmq-cn-XXXX.rmq.aliyuncs.com:8080”。
        // 注意!!!直接填寫控制臺提供的域名和端口即可,請勿添加http://或https://前綴標識,也不要用IP解析地址。
        factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "ACCESS POINT"); 
        // 設置日志路徑。
        factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");

        // 創建生產者實例。
        // 說明:生產者實例是線程安全的,可用于發送不同Topic的消息。基本上,您每一個線程只需要一個生產者實例。
        OrderProducer producer = ONSFactory.getInstance().createOrderProducer(factoryInfo);

        // 啟動客戶端實例。
        producer.start();

        // 創建消息對象。
        Message msg = new Message(factoryInfo.getPublishTopics(), "tagA", "Example message body");
        string shardingKey = "App-Test";
        for (int i = 0; i < 32; i++) {
            try
            {
                SendResultONS sendResult = producer.send(msg, shardingKey);
                Console.WriteLine("send success {0}", sendResult.getMessageId());
            }
            catch (Exception ex)
            {
                Console.WriteLine("send failure{0}", ex.ToString());
            }
        }

        // 在您的線程即將退出時,關閉生產者實例。
        producer.shutdown();

    }
}

訂閱順序消息

using System;
using System.Text;
using System.Threading;
using 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();
            /**
            * 如果是使用公網接入點訪問,則必須設置AccessKey和SecretKey,里面填寫實例的用戶名和密碼。實例用戶名和密碼在控制臺訪問控制的智能身份識別頁簽中獲取。
            * 注意!!!這里填寫的不是阿里云賬號的AccessKey ID和AccessKey Secret,請務必區分開。
            * 如果是在阿里云ECS內網訪問,則無需配置,服務端會根據內網VPC信息智能獲取。
            * 如果實例類型為Serverless實例,公網訪問必須設置實例的用戶名密碼,當開啟內網免身份識別時,內網訪問可以不設置用戶名和密碼。
            */  
            // 實例用戶名和密碼在消息隊列RocketMQ版控制臺訪問控制的智能身份識別頁簽中獲取。
            factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "INSTANCE USER NAME");
            factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "INSTANCE PASSWORD" );
            // 注意!!!訪問RocketMQ 5.x實例時,InstanceID屬性不需要設置,否則會導致失敗。
            
            // 設置為您在消息隊列RocketMQ版控制臺創建的Group ID。
            factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "GID_example");
            // 您在消息隊列RocketMQ版控制臺創建的Topic。
            factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "T_example_topic_name");
            // 設置為您從消息隊列RocketMQ版控制臺獲取的接入點信息,類似“rmq-cn-XXXX.rmq.aliyuncs.com:8080”。
            // 注意!!!直接填寫控制臺提供的域名和端口即可,請勿添加http://或https://前綴標識,也不要用IP解析地址。
            factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "ACCESS POINT"); 
            // 設置日志路徑。
            factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");

            // 創建消費者實例。
            OrderConsumer consumer = ONSFactory.getInstance().createOrderConsumer(factoryInfo);

            // 訂閱Topic。
            consumer.subscribe(factoryInfo.getPublishTopics(), "*",new MyMsgOrderListener());

            // 啟動消費者實例。
            consumer.start();

            // 讓主線程睡眠一段時間。
            Thread.Sleep(30000);

            // 不再使用時,關閉消費者實例。
            consumer.shutdown();
        }
    }
}

定時/延時消息收發示例

發送定時/延時消息

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

namespace ons
{
    class onscsharp
    {
        static void Main(string[] args)
        {
            // Producer創建和正常工作的參數,必須輸入。
            ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
            // 設置為您在消息隊列RocketMQ版控制臺創建的Group ID。
            factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "XXX ");
            // 設置為您從消息隊列RocketMQ版控制臺獲取的接入點信息,類似“rmq-cn-XXXX.rmq.aliyuncs.com:8080”。
            // 注意!!!直接填寫控制臺提供的域名和端口即可,請勿添加http://或https://前綴標識,也不要用IP解析地址。
            factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "ACCESS POINT");
            // 您在消息隊列RocketMQ版控制臺創建的Topic。
            factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "XXX");
            //消息內容。
            factoryInfo.setFactoryProperty(ONSFactoryProperty.MsgContent, "XXX");
            /**
            * 如果是使用公網接入點訪問,則必須設置AccessKey和SecretKey,里面填寫實例的用戶名和密碼。實例用戶名和密碼在控制臺訪問控制的智能身份識別頁簽中獲取。
            * 注意!!!這里填寫的不是阿里云賬號的AccessKey ID和AccessKey Secret,請務必區分開。
            * 如果是在阿里云ECS內網訪問,則無需配置,服務端會根據內網VPC信息智能獲取。
            * 如果實例類型為Serverless實例,公網訪問必須設置實例的用戶名密碼,當開啟內網免身份識別時,內網訪問可以不設置用戶名和密碼。
            */  
            // 實例用戶名和密碼在消息隊列RocketMQ版控制臺訪問控制的智能身份識別頁簽中獲取。
            factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "INSTANCE USER NAME");
            factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "INSTANCE PASSWORD" );
            // 注意!!!訪問RocketMQ 5.x實例時,InstanceID屬性不需要設置,否則會導致失敗。

            // 創建Producer。
            Producer pProducer = ONSFactory.getInstance().createProducer(factoryInfo);

            // 在發送消息前,必須調用start方法來啟動Producer,只需調用一次即可。
            pProducer.start();

            Message msg = new Message(
                // 消息主題。
                factoryInfo.getPublishTopics(),
                // 消息標簽。
                "TagA",
                // 消息主體。
                factoryInfo.getMessageContent()
            );

            // 設置代表消息的業務關鍵屬性,請盡可能全局唯一。
            // 以方便您在無法正常收到消息情況下,可通過消息隊列RocketMQ版控制臺查詢消息并補發。
            // 注意:不設置也不會影響消息正常收發。
            msg.setKey("ORDERID_100");

            // deliver time,單位:ms。指定一個時刻,在這個時刻之后消息才能被消費,這個例子表示3s后才能被消費。
            long deliverTime = System.currentTimeMillis() + 3000;
            msg.setStartDeliverTime(deliverTime);

            // 發送消息,只要不拋出異常,就代表發送成功。
            try
            {
                SendResultONS sendResult = pProducer.send(msg);
            }
            catch(ONSClientException e)
            {
                // 發送失敗處理。
            }

            // 在應用退出前,必須銷毀Producer對象,否則會導致內存泄露等問題。
            pProducer.shutdown();

        }
 }
}           

訂閱定時/延時消息

訂閱定時/延時消息的示例代碼和訂閱普通消息一樣,請參見訂閱普通消息

事務消息收發示例

發送事務消息

  1. 發送半事務消息(Half Message)及執行本地事務,示例代碼如下。

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using System.Runtime.InteropServices;
     using ons;
    
     namespace ons
     {
     public class MyLocalTransactionExecuter : LocalTransactionExecuter
     {
         public MyLocalTransactionExecuter()
         {
         }
    
         ~MyLocalTransactionExecuter()
         {
         }
         public override TransactionStatus execute(Message value)
         {
                 Console.WriteLine("execute topic: {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(有可能消息體一樣,但消息ID不一樣。當前消息ID在消息隊列RocketMQ版控制臺無法查詢)。
                 string msgId = value.getMsgID();
                 // 消息體內容進行crc32, 也可以使用其它的如MD5。
                 // 消息ID和crc32id主要是用來防止消息重復。
                 // 如果要求消息絕對不重復,推薦做法是對消息體body使用crc32或MD5來防止重復消息。
    
                 TransactionStatus transactionStatus = TransactionStatus.Unknow;
                 try {
                     boolean isCommit = 本地事務執行結果;
                     if (isCommit) {
                         // 本地事務成功則提交消息。
                         transactionStatus = TransactionStatus.CommitTransaction;
                     } else {
                         // 本地事務失敗則回滾消息。
                         transactionStatus = TransactionStatus.RollbackTransaction;
                     }
                 } catch (Exception e) {
                     // 處理異常。
                 }
                 return transactionStatus;
         }
     }
     class onscsharp
     {
    
         static void Main(string[] args)
         {
             ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
             // 設置為您從消息隊列RocketMQ版控制臺獲取的接入點信息,類似“rmq-cn-XXXX.rmq.aliyuncs.com:8080”。
             // 注意!!!直接填寫控制臺提供的域名和端口即可,請勿添加http://或https://前綴標識,也不要用IP解析地址。
             factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "ACCESS POINT");
             // 您在消息隊列RocketMQ版控制臺創建的Topic。
             factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "");
             // 消息內容。
             factoryInfo.setFactoryProperty(ONSFactoryProperty.MsgContent, "");
             /**
              * 如果是使用公網接入點訪問,則必須設置AccessKey和SecretKey,里面填寫實例的用戶名和密碼。實例用戶名和密碼在控制臺訪問控制的智能身份識別頁簽中獲取。
              * 注意!!!這里填寫的不是阿里云賬號的AccessKey ID和AccessKey Secret,請務必區分開。
              * 如果是在阿里云ECS內網訪問,則無需配置,服務端會根據內網VPC信息智能獲取。
              * 如果實例類型為Serverless實例,公網訪問必須設置實例的用戶名密碼,當開啟內網免身份識別時,內網訪問可以不設置用戶名和密碼。
              */  
              // 實例用戶名和密碼在消息隊列RocketMQ版控制臺訪問控制的智能身份識別頁簽中獲取。
              factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, "INSTANCE USER NAME");
              factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, "INSTANCE PASSWORD" );
              // 注意!!!訪問RocketMQ 5.x實例時,InstanceID屬性不需要設置,否則會導致失敗。
    
             // 創建事務生產者。       
             LocalTransactionChecker myChecker = new MyLocalTransactionChecker();
             TransactionProducer pProducer =ONSFactory.getInstance().createTransactionProducer(factoryInfo,ref myChecker);
    
             // 在發送消息前,必須調用start方法來啟動Producer,只需調用一次即可,啟動之后可以多線程并發發送消息。
             pProducer.start();
    
                 Message msg = new Message(
                 //Message Topic
                 factoryInfo.getPublishTopics(),
                 //Message Tag
                 "TagA",
                 //Message Body
                 factoryInfo.getMessageContent()
             );
    
             // 設置代表消息的業務關鍵屬性,請盡可能全局唯一。
             // 以方便您在無法正常收到消息情況下,可通消息隊列RocketMQ版過控制臺查詢消息并補發。
             // 注意:不設置也不會影響消息正常收發。
             msg.setKey("ORDERID_100");
    
             // 發送消息,只要不拋出異常,就代表發送成功。
             try
             {
                 LocalTransactionExecuter myExecuter = new MyLocalTransactionExecuter();
                 SendResultONS sendResult = pProducer.send(msg, ref myExecuter);
             }
             catch(ONSClientException e)
             {
                 Console.WriteLine("\nexception of sendmsg:{0}",e.what() );
             }
    
             // 在應用退出前,必須銷毀Producer對象,否則會導致內存泄露等問題。
             // shutdown之后不能重新start此Producer。
             pProducer.shutdown();
         }
     }
     }
  2. 提交事務消息狀態,示例代碼如下。

    public class MyLocalTransactionChecker : LocalTransactionChecker
    {
        public MyLocalTransactionChecker()
        {
        }
        ~MyLocalTransactionChecker()
        {
        }
        public override TransactionStatus check(Message value)
        {
                Console.WriteLine("check topic: {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(有可能消息體一樣,但消息ID不一樣。當前消息ID在消息隊列RocketMQ版控制臺無法查詢)。
                string msgId = value.getMsgID();
                // 消息體內容進行crc32,也可以使用其它的如MD5。
                // 消息ID和crc32id主要是用來防止消息重復。
                // 如果業務本身是冪等的,可以忽略,否則需要利用msgId或crc32Id來做冪等。
                // 如果要求消息絕對不重復,推薦做法是對消息體body使用crc32或MD5來防止重復消息。
                TransactionStatus transactionStatus = TransactionStatus.Unknow;
                try {
                    boolean isCommit = 本地事務執行結果;
                    if (isCommit) {
                        // 本地事務成功、提交消息。
                        transactionStatus = TransactionStatus.CommitTransaction;
                    } else {
                        // 本地事務失敗、回滾消息。
                        transactionStatus = TransactionStatus.RollbackTransaction;
                    }
                } catch (Exception e) {
                    //exception handle
                }
                return transactionStatus;
        }
        }

訂閱事務消息

訂閱事務消息的示例代碼和訂閱普通消息一樣,請參見訂閱普通消息