初涉AWS 之SQS在.Net中的使用

SQS,Amazon Simple Queue Servicehtml

瞭解SQSweb

從建立到使用app

SQS有兩種模式,一種是爭搶模式,另外一種是FIFO(first in first out),看本身須要配置ide

使用aws的SQS,首先先從NuGet下載AWSSDK,AWSSDK.Core.這兩個程序包屬於互相有交集又有補集的程序包。Core是用在覈心代碼,另外一個用在app層。ui

須要使用SQS須要在appconfig文件中添加你的帳戶密鑰spa

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

建立一個client3d

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

寫入一個messagecode

 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

讀取messagehtm

 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,看本身須要blog

刪除一個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/

相關文章
相關標籤/搜索