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" />
建立一個client3d
1 AmazonSQSConfig amazonSQSConfig = new AmazonSQSConfig(); 2 AmazonSQSClient amazonSQSClient = new AmazonSQSClient(amazonSQSConfig);
寫入一個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);
讀取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 }
每一個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);
這位外國小哥哥的代碼給我了一些參考,附上 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/