草庐IT

python - 轮询 AWS SQS 队列并从队列中删除接收到的消息的最佳实践?

我有一个SQS队列,它不断地被数据消费者填充,我现在正在尝试创建服务,使用Python的boto从SQS中提取这些数据。我的设计方式是让10-20个线程都尝试从SQS队列中读取消息,然后对数据(业务逻辑)执行它们必须执行的操作,然后再返回队列获取完成后的下一批数据。如果没有数据,他们将等待直到有一些数据可用。对于这个设计,我有两个地方不确定是否需要使用较长的time_out值调用receive_message(),如果在20秒(允许的最大值)内没有返回任何内容,那么就重试?或者是否有一种仅在数据可用时才返回的阻塞方法?我注意到一旦我收到消息,它并没有从队列中删除,我是否必须接收消息然后

python - 每当队列中有内容时,Amazon 的 SQS 如何通知我的 "worker"服务器之一?

我正在学习本教程:http://boto.s3.amazonaws.com/sqs_tut.html当队列中有东西时,我如何分配我的20个工作人员中的一个来处理它?我正在使用Python。 最佳答案 不幸的是,SQS缺少一些我们经常期望在队列中使用的语义。没有通知或任何类型的阻塞“获取”调用。亚马逊的相关SNS/简单通知服务可能对您有所帮助。将工作添加到队列后,您可以向订阅的工作人员发送通知。另见:http://aws.amazon.com/sns/BestpracticesforusingAmazonSQS-Pollingtheq

amazon-web-services - 在 golang 中订阅 SNS 主题和/或 SQS 队列?

我知道如何在java中执行此操作,但我根本无法在Go中弄明白。我想做的就是找到一种方法来检测在S3存储桶中创建了一个项目,然后触发SNS主题,然后通知我文件在S3中的位置。有没有人有一个工作示例,说明我如何在需要时订阅SNS主题或SNS队列?因为我似乎只能找到Java和Node。我可以找到用于go的发布示例,但它们对我的用例用处不大。 最佳答案 要使用SNS,您需要一个简单的HTTP/HTTPS端点来接收SNS通知。其中分为两部分(确认订阅和处理来自HTTP/HTTPS端点的消息)1。确认订阅做一些像这样简单的事情:funcconf

amazon-web-services - 可以从 SQS url 获取 AWS 区域吗?

我有一个SQSURL,其中也包含区域。我正在使用官方GoSDK在此SQS上执行操作,这需要AWS区域来初始化session。目前,我已经编写了一个实用函数来解析URL并返回AWS区域。示例URL:https://sqs.us-east-1.amazonaws.com/774557911234/my_sqs_name示例初始化代码:sess,err:=session.NewSession()iferr!=nil{return}s:=sqs.New(sess,aws.NewConfig().WithRegion(getRegionFromSQSURL(config.SQSURL))从URL

node.js - Nodejs sqs队列处理器

我正在尝试编写一个nodejssqs队列处理器。"usestrict";varappConf=require('./config/appConf');varAWS=require('aws-sdk');AWS.config.loadFromPath('./config/aws_config.json');varsqs=newAWS.SQS();varexec=require('child_process').exec;functionreadMessage(){sqs.receiveMessage({"QueueUrl":appConf.sqs_distribution_url,"Ma

events - 如何让 nodejs 服务器监听 AWS SQS?

在详细解释问题之前,我先告诉你我目前的做法。我有一个运行setInterval()的js脚本。并且每个间隔,我都会调用SQS从队列中获取消息。如果有消息,那么我处理它。因此,它将无限运行,直到我终止该进程。我之前也建过一个Node服务器(使用nodejs.org中的例子)所以,我想知道的是,...而不是让setInterval定期运行。有没有办法,如果SQS中有一条新消息,那么它会触发一个事件并处理该消息? 最佳答案 这个问题已经超过2年了..但是有比更改轮询间隔更好的方法。而是将队列的接收消息等待时间设置为最长20秒。然后您可以进

python - 向 SQS 发布消息

我有一些EC2服务器从SQS队列中提取工作。偶尔,他们会遇到无法完成工作的情况。我有这个条件的过程通过电子邮件发送给我。就目前而言,消息一直处于“飞行状态”,直到超时。我希望该过程在发送电子邮件后立即将其释放回队列。但是,我不确定如何做到这一点。有办法吗?如果是这样,请您指点我的电话或发布代码片段。我正在使用Python2.7.3和Boto2.5.2。 最佳答案 如果您阅读了一条消息,并且出于某种原因决定不想处理它,而是希望它立即可供队列的其他读者使用,您可以简单地设置该消息的visibilitytimeout使用change_vi

java - Amazon SQS Java SDK - 无法接收消息属性

在发送消息之前使用以下代码向SQS发布带有属性的消息(并在SQS控制台中检查是否所有内容都正确发布)...messageRequest.addMessageAttributesEntry("attributeTest",newMessageAttributeValue().withDataType("String").withStringValue("attributeTest123"));我无法检索消息中的任何消息属性。结果,我所看到的只是“0个属性”。在AmazonSQS控制台中重新检查消息,消息和属性仍然存在。//MessagewaspreviouslycheckedinSQSc

java - 在我的 Storm 集群中读取 AWS SQS 队列时导致这些 ParseError 异常的原因是什么

我正在使用Storm0.8.1从AmazonSQS队列中读取传入消息,并且在这样做时得到一致的异常:2013-12-0202:21:38executor[ERROR]java.lang.RuntimeException:com.amazonaws.AmazonClientException:Unabletounmarshallresponse(ParseErrorat[row,col]:[1,1]Message:JAXP00010001:Theparserhasencounteredmorethan"64000"entityexpansionsinthisdocument;thisis

关于亚马逊 s3:在 AWS Lambda 中解析 SQS 消息触发器 – Python

ParseSQSmessagetriggerinAWSLambda-Python我收到关于S3存储桶上传的通知,以将消息放入SQS队列。SQS队列触发一个lambda函数。我正在尝试从触发lambda函数的SQS消息中提取上传的文件的名称。当打印到CloudWatch日志时,我的SQS事件记录如下所示:1234567891011121314151617181920212223242526272829303132333435363738{"Records":[  {    "eventVersion":"2.1",    "eventSource":"aws:s3",    "awsRegion