Boto3 操作AWS的SQS
来源:互联网 发布:完全变态 知乎 编辑:程序博客网 时间:2024/06/18 04:32
- SQS 介绍:
Amazon Simple Queue Service (SQS) 是一项快速可靠、可扩展且完全托管的消息队列服务。Amazon SQS 可以简单、经济高效地解耦云应用程序的各个组件。您可以使用 Amazon SQS 来传输任何规模的数据,而不会丢失消息,也不要求其他服务始终可用。Amazon SQS 包括具有高吞吐量和至少一次处理的标准队列,还包括能提供 FIFO (先进先出) 传送和严格一次处理的 FIFO 队列。 优点:
可靠
Amazon SQS 在 Amazon 高度可用的数据中心中运行,因此队列在应用程序需要的任何时候都能保持可用。为防止消息丢失或不可用,所有消息都以冗余形式存储在多个服务器和数据中心内。
简便
开发人员最初使用 Amazon SQS 时只需用到 3 个 API:SendMessage、ReceiveMessage 和 DeleteMessage。其他 API 则可用于提供高级的功能。
灵活
根据应用程序的需要,使用适当的队列。标准队列提供最高吞吐量、最大努力排序和至少一次传送。FIFO 队列可确保严格排序和严格一次处理,但仅具有有限吞吐量。
可扩展
Amazon SQS 可随应用程序一起动态扩展,因此您无需担心提前预置的问题。您可以使用的队列和消息数量没有限制,而且标准队列能提供几乎无限的吞吐量。
安全
提供了身份验证机制,确保 Amazon SQS 队列中的消息受到保护,防止遭到未经授权的访问。
便宜
Amazon SQS 无前期费用或固定开支。您可以按 API 请求数支付小额费用。如果您跨 AWS 区域传输数据,需支付额外的数据传输费。简单的例子:
创建SQS例子
# Get the service resourcesqs = boto3.resource('sqs')# Create the queue. This returns an SQS.Queue instancequeue = sqs.create_queue(QueueName='test', Attributes={'DelaySeconds': '5'})# You can now access identifiers and attributesprint(queue.url)print(queue.attributes.get('DelaySeconds'))
- 使用现有的SQS
# Get the service resourcesqs = boto3.resource('sqs')# Get the queue. This returns an SQS.Queue instancequeue = sqs.get_queue_by_name(QueueName='test')# You can now access identifiers and attributesprint(queue.url)print(queue.attributes.get('DelaySeconds'))
- 如何跨region使用服务
由于国内的独特的政策原因,中国区的服务是独立于国外的,所以一旦你需要国外也使用AWS的服务,就面临着同时操作多个账号和不同的region的情况,那么你就需要使用多个密yao,所以官方文档介绍的第一种方法,就不再适用了,我在这里给大家介绍一种简便的方法:
from boto3 import Sessionsession = Session(region_name='', aws_access_key='', aws_secret_access_id='')sqs = session.resource('sqs')queue = sqs.get_queue_by_name(QueueName='test')
这里缺点是如果没有动态加载密码的系统的话,可能需要hardcode密码,建议一定要动态加载密码。
5.面向对象服务的SQS
下面是一个实际开发中我写的一个面向的对象使用SQS,返回queue对象。
# coding:utf-8from boto3 import Sessionimport jsonimport loggingfrom error import SqsConnectionErrorclass SqsConnectionError(Exception): pass logger = logging.getLogger(__name__)class MyServiceSqs(object): def __init__(self, **kwargs): """ example kwargs = {'region':region_name,'access_key':'dadaderefa1432','secret_key':'jhfoiewhro43h53'} """ self.region = kwargs['region'] self.access_key = kwargs['access_key'] self.secret_key = kwargs['secret_key'] self.session = self.__session() def __session(self): try: session = Session(aws_access_key_id=self.access_key, aws_secret_access_key=self.secret_key,region_name=self.region) except: raise SqsConnectionError("Failed to connect session in region{0}".format(self.region)) return session def sqs_connect_queue(self, queue_name): """ """ try: sqs = self.session.resource('sqs') except: raise SqsConnectionError("Failed to retrieve queue{0}".format(queue_name)) try: queue = sqs.get_queue_by_name(QueueName=queue_name) except: raise SqsConnectionError("Failed to retrieve queue {0} in{1}".format(queue_name)) return queue def poll_message(self, queue_name): """ get batch message from queue, return a list about meesage.body """ queue = self.sqs_connect_queue(queue_name) response = queue.receive_messages(MaxNumberOfMessages=10, WaitTimeSeconds=5) messages = [] if not response: logger.info("{0} queue don't has any message Notification") try: for message in response: notice = json.loads(message.body) messages.append(notice['Message']) message.delete except: logger.error("Can't get message from queue{0}".format(queue)) return messages
源码:https://github.com/Dushibing/aws/blob/master/MySqsConnector.py
参考文档:
http://boto3.readthedocs.io/en/latest/reference/services/sqs.html
几种主要服务的例子
https://github.com/boto/boto3/tree/develop/docs/source/guide
- Boto3 操作AWS的SQS
- AWS Boto3 使用介绍(一)
- python boto AWS SQS connection
- AWS SQS DOC AND RUBY DEMO
- Spring集成 Apache Camel: AWS-SQS
- AWS sns推送消息 sqs获取消息实现Demo
- AWS的一些命令操作
- 简化AWS CLI操作的jungle
- pytho脚本通过boto3访问radosgw提供的对象存储
- AWS DMS操作示例
- e企播报:AWS的操作与SC17的新势力
- AWS由于操作不当,突然多出947.75多刀的费用,经过确认,AWS又答应退回账单
- Python 安装boto boto3
- boto3 dynamodb 入门使用
- aws支持的语言
- 一说就懂的 AWS S3
- Amazon的网络服务aws
- 一说就懂的AWS Cloudformation
- libsvm
- C# HTTP
- 区块链是什么
- android选项卡
- The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved
- Boto3 操作AWS的SQS
- 【深度学习】 读书笔记 壹 深度学习概述
- Android官方资料--OTA Package Tools
- VMware中Bridged、NAT、host-only三种网络连接模式的原理及其区别
- javascript模拟原生事件
- PHP实现本地图片的上传和验证功能
- 第一个程序
- https和http的区别介绍
- Material Design实现应用动态改变色调的方法