亚马逊Elastic Beanstalk工作者层

时间:2014-04-23 08:03:50

标签: amazon-web-services elastic-beanstalk

我需要做一些异步作业处理给定一个Web请求,我将定期轮询直到它完成。我有整个堆栈并在本地运行,但我无法从概念上理解如何将其转移到EBS工作层。我在本地使用Django和Celery以及RabbitMQ,并且成功地将RabbitMQ替换为Amazon SQS。但是,当我尝试创建一个与webapp相同的RDS数据库但不成功的工作层时。我陷入了可以对消息进行排队但无法从队列中读取它们的问题。我需要使用这些消息对数据库执行一些昂贵的操作,并为使用者准备结果。是否有一些我缺少的建筑作品?我如何以及在哪里获得芹菜守护程序来处理SQS消息?

2 个答案:

答案 0 :(得分:18)

来自Elastic Beanstalk documentation

  

启动AWS Elastic Beanstalk环境时,您可以选择环境层,平台和环境类型。您选择的环境层确定AWS Elastic Beanstalk是否配置资源以支持处理HTTP(S)请求的Web应用程序或处理后台处理任务的Web应用程序。

     

AWS Elastic Beanstalk在Auto Scaling组中的每个Amazon EC2实例上安装一个守护程序,以处理工作线程环境层中的Amazon SQS消息。守护程序从Amazon SQS队列中提取数据,将其插入HTTP POST请求的消息正文中,然后将其发送到本地主机上的用户可配置的URL路径。 HTTP POST请求中的消息正文的内容类型默认为application / json。

     

从开发人员的角度来看,在工作层上运行的应用程序只是一个普通的Web服务。它将接收来自在实例上为您配置的AWS Elastic Beanstalk守护程序的调用。

     

请求将发送到您配置的HTTP Path值。这样做的方式是在守护程序发起请求的工作线程环境层中的Web应用程序中显示。通过这种方式,守护程序与Web服务器环境层中的负载均衡器起着类似的作用。

     

工作服务器环境层在处理队列中的消息后,通过本地环回将消息转发到您指定的URL上的Web应用程序。只能从本地主机访问队列URL。由于您只能从同一EC2实例访问队列URL,因此无需验证即可验证传递给URL的邮件。

     

工作线程环境中的Web应用程序应仅侦听本地主机。当工作线程环境层中的Web应用程序返回200 OK响应以确认它已收到并成功处理了请求时,守护程序将向SQS队列发送DeleteMessage调用,以便从队列中删除该消息。 (SQS自动删除队列中的消息的时间超过配置的RetentionPeriod。)如果应用程序返回200 OK以外的任何响应,或者在配置的InactivityTimeout期间没有响应,则SQS再次使消息在队列中可见并可用于另一次处理。

答案 1 :(得分:0)

我目前正在使用我的Django app + Celery的“标准”Web层(配置了更多的进程和线程),我有一个EC2实例,其中运行RabbitMQ的自定义AMI。 Celery不完全支持SQS,来自http://docs.celeryproject.org/en/latest/getting-started/brokers/sqs.html

  

SQS运输需要在许多领域和那里进行改进   是几个开放的错误。

老实说,我从来没有理解Web工作者层应该是什么/表现什么,但我目前的配置似乎工作得很好(我也使用Celery beat来管理期间任务)。 我使用Supervisor守护Celery(Elastic Beanstalk已经使用它来管理apache)。