使用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 地大工程研究中心
使用Amazon Simple Queue Service(SQS) 实现简单的消息服务的更多相关文章
- Amazon SQS(Simple Queue Service) 简单介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/hongchangfirst/article/details/25877059 SQS即Simple ...
- [AWS vs Azure] 云计算里AWS和Azure的探究(6) - Amazon Simple Storage Service 和 Microsoft Azure Blob Storage
这几天Nasuni公司出了一份报告,分析了各个云厂商的云存储的性能,包括Amazon S3,Azure Blob Storage, Google Drive, HP以及Rackspace.其中性能上A ...
- HTTPSQS(HTTP Simple Queue Service)消息队列
HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...
- AWS系列-Amazon Simple Notification Service (SNS)
SNS是一项 Web 服务,用于协调和管理向订阅终端节点或客户交付或发送消息的过程.在 Amazon SNS 中有两种类型的客户端:发布者和订阅者,也称为生产者和消费者.发布者通过创建消息并将消息发送 ...
- Angular2 Service实践——实现简单音乐播放服务
引言: 如果说组件系统(Component)是ng2应用的躯体,那把服务(Service)认为是流通于组件之间并为其带来生机的血液再合适不过了.组件间通信的其中一种优等选择就是使用服务,在ng1里就有 ...
- Creating a Simple Web Service and Client with JAX-WS
Creating a Simple Web Service and Client with JAX-WS 发布服务 package cn.zno.service.impl; import javax. ...
- Amazon SNS (Simple Notification Service) Using C# and Visual Studio
SNS (Amazon Simple Notification Services) Amazon SNS (Amazon Simple Notification Services) is a noti ...
- S3 服务(Simple Storage Service简单存储服务) 简介(与hdfs同一级)
图1 spark 相关 亚马逊云存储之S3(Simple Storage Service简单存储服务) (转 ) S3是Simple Storage Service的缩写,即简单存储服务.亚马逊的名 ...
- simple queue(简单队列)
Virtual host-虚拟主机 虚拟主机,用于进行逻辑隔离,是最上层的路由,类似于redis的16个db,是一种逻辑上的隔离 一个virtualhost里面可以有若干个Exchange和Queue ...
随机推荐
- Tkinter Spinbox
Python - Tkinter Spinbox: Spinbox小部件是一个标准的Tkinter的Entry小窗口部件的变体,它可以用来选择从一个固定的值. Spinbox小部件是一个标准的Tk ...
- Python 小知识点(6)--静态方法、类方法、属性方法
(1)静态方法-->-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__ ...
- A标签的href设置为#代表什么意思?
空锚点<a href="#abc">a link <#>表示跳到锚点abc,<a href="#">a link <# ...
- 【306】通过ArcPy编写ArcToolbox
参考:使用 Python 创建工具 参考:在 Python 工具箱中定义参数数据类型 基本步骤如下: (1)创建一个 Python 脚本,并保存成 .py 文件. (2)创建一个自定义工具箱(.tbx ...
- 在java中导出excel
package com.huawei.controller; import java.io.File;import java.io.IOException;import java.util.HashM ...
- ActiveMQ集群整体认识
出自:https://segmentfault.com/a/1190000014592517 前言 最终需要掌握 Replicated LevelDB Store部署方式,这种部署方式是基于ZooKe ...
- GameObject.Active
[GameObject.Active] 用于控制一个对象是否激活,一个对象激活当且本身active=true,并且它的父结点也都active.相当API有: 1)GameObject.SetActiv ...
- div垂直居中的N种方法 单行/多行文字(未知高度/固定高度)
说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的 CSSHack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的 ...
- Vuex笔记/axios笔记
每一个 Vuex 应用的核心就是 store(仓库).“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state).Vuex 和单纯的全局对象有以下两点不同: Vuex 的状态存储 ...
- js-textarea文本换行符处理,Java后端以及js前端如何处理
方法一:后台处理 TextArea的换行符处理 TextArea文本转换为Html:写入数据库时使用 js获取了textArea的文本内容之后,器内容含有换行,空格,制表符之类的字符,但是js字符串不 ...