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