使用Amazon Simple Queue Service(SQS) 实现简单的消息服务
一? 引言
亞馬遜Amazon作為云計算的領跑者推出了很多云服務,最近因為項目的原因,需要用到SQS服務,因此簡要地寫下這篇隨筆,一來方便以后查閱,二來方便共享一些簡單的操作。
SQS即可以理解為一個放在云上的消息隊列,它不是FIFO(First in First out)的,但是由于人工測試是有一定的延遲性,而消息到云端隊列的時間到微秒級別,因此人工是看不出來它不是FIFO【云端隊列和我們常規的隊列稍有不同,不能保證順序是嚴格的FIFO】,事實上這也不是重點。
保存在隊列中的消息由一定時間的存活期。通過SQS,我們可以實現位于不同地方的不同程序在不同時間內進行通信,比如我可以從位于北京的一個普通桌面應用程序發送消息到亞馬遜簡單隊列服務(SQS),發送完成后即可退出,其后位于北美的一些應用程序可以通過讀取存儲在SQS上的消息來完成北京發出的指令。
二? ??準備過程
要使用Amazon SQS服務,你首先需要注冊一個亞馬遜云服務賬號,現在亞馬遜提供了為期一年的免費服務。你可以參考峻祁連的另一片文章《免費的云技術平臺--亞馬遜WEB服務AWS提供免費方式》。亞馬遜提供了幾種SDK,包括Java,Python,.net。因為項目使用的是.NET框架,因此我簡單地用.NET來演示。.NET的SDK請訪問https://docs.aws.amazon.com/sdkfornet/v3/apidocs/Index.html 當然你可以通過NuGet管理平臺來下載Amazon SQS相關包。在此就不贅述。
三? ?模擬過程
1) 創建一個對象來連接到Amazon SQS.
?
AmazonSQSClient objClient = new AmazonSQSClient("AssaaIAxxxxx", "lssssX1axxxxxxx");
?
使用通過key來new 一個 AmzonSQSClient對象。這個key是你創建亞馬遜云服務賬號,再創建SQS隊列,系統生成的。我這邊是云服務發郵件過來的。具體key就不公布出去。
?
2) 展示云端隊列。
展示云端隊列,一個是調用objClient的某個方法獲取隊列列表。二是需要一個對象來存儲這個列表。這二者都可以在SDK中找到。
ListQueuesResponse objqueuesResponseList = new ListQueuesResponse();???
objqueuesResponseList = objClient.ListQueues(new ListQueuesRequest());
ListQueuesResult Result = objqueuesResponseList.ListQueuesResult;
主要是基于Request 和 Response的。 因此需要 ListQueuesRequest對象,和ListQueuesResponse對象。
?
3) 發送消息。
調用objClient.SendMessage方法。
?
?
從SDK中可以看到。SendMessage中需要一個MessageRequest對象。因此我們將我們需要發送的消息。封裝成一個MessageRequest對象即可。以下是一個MessageRequest對象的實例。
?????? new SendMessageRequest() {MessageBody = xxxxx , QueueUrl = xxxx } ;
其中QueueUrl可以從2)中的result中獲取,在此就不贅述。
?
4) 接受消息
a)???? new一個 ReceiveMessageResponse 對象。
b)??? 調用objClient 的 ReceiveMessage方法
ReceiveMessageResponse queueReceiveMessageResponse = new ReceiveMessageResponse();
?? ?queueReceiveMessageResponse = objClient.ReceiveMessage(new ReceiveMessageRequest() { QueueUrl = xxx, MaxNumberOfMessages = 10 });
c)???? new一個 ReceiveMessageResult對象存儲 Response的結果
d)??? 使用一個List<Message>列表存儲Message列表。 ReceiveMessageResult.Message
?
?
以下是部分源代碼:
private void DisplayQueues()
{
ListQueuesResponse objqueuesResponseList = new ListQueuesResponse();
objqueuesResponseList = objClient.ListQueues(new ListQueuesRequest());
ListQueuesResult Result = objqueuesResponseList.ListQueuesResult;
this.QueuesList.Visible = true;
this.QueuesList.DataSource = Result.QueueUrl;
this.QueuesList.DataBind();
}
?
protected void btnSendMessage_Click(object sender, EventArgs e)
{
if (QueuesList.SelectedIndex > -1)
{
if (!string.IsNullOrEmpty(txtMessage.Text))
{
string selectedQueue = this.QueuesList.SelectedItem.Value.ToString();
objClient.SendMessage(new SendMessageRequest() { MessageBody = this.txtMessage.Text, QueueUrl = selectedQueue });
Response.Write("<script>alert('Message sent successfully to Queue.');</script>");
}
else
{
Response.Write("<script>alert('Please enter Message Text.');</script>");
}
}
else
{
Response.Write("<script>alert('Please select Queue from list.');</script>");
}
}
2018/7/23 地大工程研究中心
?
轉載于:https://www.cnblogs.com/CugYzc/p/9353267.html
總結
以上是生活随笔為你收集整理的使用Amazon Simple Queue Service(SQS) 实现简单的消息服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客申请成功啦,好开心!!!!
- 下一篇: Eclipse 配置 maven 的两个