zoukankan      html  css  js  c++  java
  • 初涉AWS 之SQS在.Net中的使用

    SQS,Amazon Simple Queue Service

    了解SQS

    从创建到使用

    SQS有两种模式,一种是争抢模式,另一种是FIFO(first in first out),看自己需要配置

    使用aws的SQS,首先先从NuGet下载AWSSDK,AWSSDK.Core.这两个程序包属于互相有交集又有补集的程序包。Core是用在核心代码,另一个用在app层。

    需要使用SQS需要在appconfig文件中添加你的账户密钥

    1  <appSettings>
    2     <add key="AWSKeyId" value="XXXXXXXXXM7YLSPZMQ" />
    3     <add key="AWSSecretId" value="xxxxxxxxxxxxxxxxxx4pXoFUPMeXFxDGWzTc" />
    4     <add key="AWSProfileName" value="{yourprofilename}" />
    5     <add key="AWSRegion" value="cn-north-1" />
    appconfig

    创建一个client

    1  AmazonSQSConfig amazonSQSConfig = new AmazonSQSConfig();
    2             AmazonSQSClient amazonSQSClient = new AmazonSQSClient(amazonSQSConfig);
    client

    写入一个message

     1 SendMessageRequest sendMessageRequest = new SendMessageRequest();
     2             sendMessageRequest.QueueUrl = myQueueURL;
     3             sendMessageRequest.MessageBody = "e-mail test";
     4 
     5 
     6             MessageAttributeValue senderValue = new MessageAttributeValue();
     7             senderValue.DataType = "String";
     8             senderValue.StringValue = "riusmary";
     9             sendMessageRequest.MessageAttributes["sender"] = senderValue;
    10 
    11             MessageAttributeValue addressValue = new MessageAttributeValue();
    12             addressValue.DataType = "String";
    13             addressValue.StringValue = "riusmary@qq.com";
    14             sendMessageRequest.MessageAttributes["address"] = addressValue;
    15 
    16             MessageAttributeValue subjectValue = new MessageAttributeValue();
    17             subjectValue.DataType = "String";
    18             subjectValue.StringValue = "01232018testing aws sqs";
    19             sendMessageRequest.MessageAttributes["subject"] = subjectValue;
    20 
    21             MessageAttributeValue bodyValue = new MessageAttributeValue();
    22             bodyValue.DataType = "String";
    23             bodyValue.StringValue = "lalalala3";
    24             sendMessageRequest.MessageAttributes["body"] = bodyValue;
    25 
    26 
    27             amazonSQSClient.SendMessage(sendMessageRequest);
    send message

    读取message

     1 ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
     2             receiveMessageRequest.QueueUrl = myQueueURL;
     3             List<string> attrName = new List<string>();
     4             attrName.Add("sender");
     5             attrName.Add("subject");
     6             attrName.Add("address");
     7             attrName.Add("body");
     8             receiveMessageRequest.MessageAttributeNames = attrName;
     9 
    10             ReceiveMessageResponse result = amazonSQSClient.ReceiveMessage(receiveMessageRequest);
    11             string receiptHandle;
    12 
    13             if (result.Messages.Count != 0)
    14             {
    15                 for (int i = 0; i < result.Messages.Count; i++)
    16                 {
    17                     if (result.Messages[i].Body == myMessageBody)
    18                     {
    19                         receiptHandle = result.Messages[i].ReceiptHandle;
    20                         try
    21                         {
    22                             sender = result.Messages[i].MessageAttributes["sender"].StringValue;
    23                             mailSubject = result.Messages[i].MessageAttributes["subject"].StringValue;
    24                             mailAddress = result.Messages[i].MessageAttributes["address"].StringValue;
    25                             mailBody = result.Messages[i].MessageAttributes["body"].StringValue;
    26                             SendEmail(sender, mailSubject, mailAddress, mailBody);
    27 
    28                             DeleteSQSMessage(amazonSQSClient, myQueueURL, receiptHandle);
    29                         }
    30                         catch (Exception)
    31                         {
    32                             var myMessage = result.Messages[i];
    33                             SendToDeadLetterQueue(amazonSQSClient, myDeadQueueURL, myMessage);
    34                         }
    35                     }
    36                 }
    37             }
    receive message

    每个queue可以建立自己相对应的Dead Letter Queue,看自己需要

    删除一个message

    1  DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest();
    2             deleteMessageRequest.QueueUrl = myQueueURL;
    3             deleteMessageRequest.ReceiptHandle = receiptHandle;
    4             DeleteMessageResponse response = amazonSQSClient.DeleteMessage(deleteMessageRequest);
    delete message

    这位外国小哥哥的代码给我了一些参考,附上 Consuming Amazon Web Services (SQS, S3) using C#.NET , RaisKazi, 12 Dec 2011

    另,使用过程中你可能会遇到这个问题, Why do SqS messages sometimes remain in-flight on queue

    P.S. 附上论坛,可能有所帮助。https://forums.aws.amazon.com/

  • 相关阅读:
    ReactNative入门 —— 动画篇(下)
    浅谈浏览器http的缓存机制
    ReactNative入门 —— 动画篇(上)
    小小改动帮你减少bundle.js文件体积(翻译)
    ReactNative入门(安卓)——API(上)
    《高性能javascript》一书要点和延伸(下)
    巧用 mask-image 实现简单进度加载界面
    降低首屏时间,“直出”是个什么概念?
    AlloyTeam2015前端大会都说了啥
    作为前端er,写在年末的一些话
  • 原文地址:https://www.cnblogs.com/riusmary/p/8358660.html
Copyright © 2011-2022 走看看