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

主題使用手冊

本文介紹如何使用C# SDK中的sample代碼,完成創建主題、創建隊列、創建訂閱和發布消息等操作。

步驟一:準備工作

  1. 下載最新版C# SDK,解壓后將工程導入到VisualStudio。

  2. 找到工程里四個項目中SDK所在的項目AliyunSDK_MNS,右擊項目名,選擇重新生成,在bin目錄下生成Aliyun.MNS.dll

    說明

    其他幾個項目里都需要引用Aliyun.MNS.dll,請配置好其他幾個項目的引用。

  3. 在項目AliyunSDK_MNS_Sample里進行配置。

    1. 將項目AliyunSDK_MNS_Sample設置為啟動項,將SyncTopicOperations.cs設置為啟動對象。

    2. 打開SyncTopicOperations.cs文件,配置以下內容:

步驟二:創建主題

如果之前未創建主題,那么首先需要創建主題。默認創建的主題名稱是TestCSharpTopic,也可以修改代碼指定主題名稱。

// 1.生成一個CreateTopicRequest實例,參數傳入topicName。這里可以同時傳入TopicAttributes,以便在CreateTopic時同時設置自定義的Topic屬性。
var createTopicRequest = new CreateTopicRequest
{
    TopicName = _topicName
};

Topic topic = null;
try
{
    topic = client.CreateTopic(createTopicRequest);
    Console.WriteLine("Create topic successfully, topic name: {0}", topic.TopicName);
}
catch (MNSException me)
{
    // 2.可能因為網絡錯誤,或者Topic已經存在等原因導致CreateTopic失敗,這里CatchException并做對應的處理,也可以分別Catch TopicAlreadyExistException等做單獨處理。
    Console.WriteLine("CreateTopic Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Create topic failed, exception info: " + ex.Message);
    return;
}          

步驟三:創建隊列

如果之前未創建隊列,那么首先需要創建隊列。默認創建的隊列名稱是myqueue,也可以修改代碼指定隊列名稱。

// 1.這里我們指定了Queue的一些屬性。對于Queue的屬性,請參見Queue。
var createQueueRequest = new CreateQueueRequest
{
    QueueName = _queueName,
    Attributes =
    {
        // VisibilityTimeout是最重要的屬性,默認為30秒。
        VisibilityTimeout = 30,
        MaximumMessageSize = 40960,
        MessageRetentionPeriod = 345600,
        // PollingWaitSeconds是非常重要的長輪詢超時時間。
        PollingWaitSeconds = 30
    }
};

try
{
    // 2.創建隊列。如果不需要特別指定Queue的屬性,也可以直接使用client.CreateQueue(_queueName)。
    var queue = client.CreateQueue(createQueueRequest);
    Console.WriteLine("Create queue successfully, queue name: {0}", queue.QueueName);
}
catch (MNSException me)
{
    // 3.如果創建隊列出錯,可以根據具體的錯誤Code做處理,也可以分別Catch QueueAlreadyExistException等做單獨處理。
    Console.WriteLine("CreateQueue Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Create queue failed, exception info: " + ex.Message);
}           

步驟四:創建訂閱

對已創建的主題進行訂閱。

string region = "";
string accountId = "";
string queueName = "TestQueue";
try
{
    // 1.生成SubscriptionAttributes,第二個參數是Subscription的Endpoint。
    SubscribeResponse res = topic.Subscribe(_subscriptionName, "acs:mns:" + region +":" + accountId +":queues/" + queueName);
    // 2.訂閱成功。
    Console.WriteLine("Subscribe succeed");
}
catch (MNSException me)
{
    // 3.可能因為網絡錯誤,或者同名的Subscription已存在等原因導致訂閱出錯,這里CatchException并做對應的處理。
    Console.WriteLine("Subscribe Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Subscribe failed, exception info: " + ex.Message);
}                       

步驟五:發布消息

發布消息到主題中。

try
{
    var response = topic.PublishMessage("message here </asdas\">");
    // 1.發布成功。
    Console.WriteLine("PublishMessage succeed! " + response.MessageId);
}
catch (MNSException me)
{
    // 2.可能因為網絡錯誤等原因導致PublishMessage失敗,這里CatchException并做對應處理。
    Console.WriteLine("PublishMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("PublishMessage failed, exception info: " + ex.Message);
}           

步驟六:從隊列接收和刪除消息

消息從主題推送到隊列后,從隊列中取出并刪除該條消息。

try
{
    // 1.直接調用receiveMessage函數。
    // receiveMessage函數接受waitSeconds參數,無特殊情況建議設置為30。
    // waitSeconds非0表示這次receiveMessage是一次http long polling,如果queue內剛好沒有message,那么這次request會在server端等到queue內有消息才返回。最長等待時間為waitSeconds的值,最大為30。
    var receiveMessageResponse = nativeQueue.ReceiveMessage(30);
    // 2.獲取ReceiptHandle,這是一個有時效性的Handle,可以用來設置Message的各種屬性和刪除Message。更多信息,請參見QueueMessage。
    _receiptHandle = message.ReceiptHandle;
}
catch (MNSException me)
{
    // 3.和CreateQueue和SendMessage一樣,ReceiveMessage也是有可能出錯的,所以這里加上CatchException并做對應的處理。
    Console.WriteLine("ReceiveMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("ReceiveMessage failed, exception info: " + ex.Message);
}

// 這里是您自己處理消息的邏輯。Sample里就直接略過這一步了。
// 如果這里發生了程序崩潰或卡住等異常情況,對應的Message會在VisibilityTimeout之后重新可見,從而可以被其他進程處理,避免消息丟失。

// 4.消息處理完成,可以從隊列里刪除這條消息。
try
{
    // 5.直接調用deleteMessage。
    var deleteMessageResponse = nativeQueue.DeleteMessage(_receiptHandle);
}
catch (MNSException me)
{
    // 6.這里CatchException并做異常處理。
    // 如果是receiptHandle已經過期,那么ErrorCode是MessageNotExist,表示通過這個receiptHandle已經找不到對應的消息。
    // 為了保證receiptHandle不過期,VisibilityTimeout的設置需要保證足夠消息處理完成。并且在消息處理過程中,也可以調用changeMessageVisibility這個函數來延長消息的VisibilityTimeout時間。
    Console.WriteLine("DeleteMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Delete message failed, exception info: " + ex.Message);
}            

步驟七:刪除主題

刪除測試主題。

try
{
    client.DeleteTopic(_topicName);
    Console.WriteLine("Delete topic succeed");
}
catch (Exception ex)
{
    Console.WriteLine("Delete topic failed, exception info: " + ex.Message);
}            

步驟八:刪除隊列

刪除測試隊列。

try 
{
    var deleteQueueResponse = client.DeleteQueue(deleteQueueRequest);
} 
catch (MNSException me)
{
    Console.WriteLine("DeleteQueue Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Delete queue failed, exception info: " + ex.Message);
}