通过 SQS 将消息发布到 Elastic Beanstalk 工作线程环境

par*_*asu 6 amazon-web-services amazon-elastic-beanstalk

我在弹性 beanstalk 上有一个带有 Web 服务器和工作环境的 docker 应用程序。

工作环境当前通过 cron 运行计划作业。我正在尝试将服务器连接到工作人员以实现以下目标:

  1. 客户端向服务器发送请求(/trigger_job)
  2. 服务器通过向 SQS 队列 (/perform_job) 发送 JSON 消息来将作业卸载给工作人员
  3. Worker 通过读取来自 SQS 的消息来执行作业

我无法找到有关 JSON 消息应是什么样子的文档。官方文档中提到了一些HTTP headers 。但没有提到标头来指定工作环境中所需的端点。

# server.py
from bottle import post, HTTPResponse


@post('/trigger_job')
def trigger_worker_job():
    # should send a JSON message to sqs to trigger the '/perform_job'
    # Need help with what the JSON message looks like
    return HTTPResponse(status=200, body={'Msg': 'Sent message'})
Run Code Online (Sandbox Code Playgroud)
# worker.py
from bottle import post, HTTPResponse


@post('/perform_job')
def perform_job():
    # job is performed in the worker environment

    return HTTPResponse(status=200, body={'Msg': 'Success'})
Run Code Online (Sandbox Code Playgroud)

Jun*_*711 1

在 Python 中,您可以从 python 示例应用程序中了解这一点,您可以在此aws 文档步骤 4:部署新应用程序版本中找到该应用程序。

您可以在 beanstalk 工作环境控制台中配置 SQS 端点。配置 > 工作线程 > 选择工作线程队列

# for example: 
environ['HTTP_X_AWS_SQSD_TASKNAME']
environ['HTTP_X_AWS_SQSD_SCHEDULED_AT']
logger.info("environ X-Aws-Sqsd-Queue %s" % environ['HTTP_X_AWS_SQSD_QUEUE'])

# regarding your message attribute. For example, the attribute name is Email, 
# you can extract it via environ['HTTP_X_AWS_SQSD_ATTR_EMAIL']). 
# Make sure that the attribute name is all capital.  
logger.info("environ X-Aws-Sqsd-Attr Email %s" % environ['HTTP_X_AWS_SQSD_ATTR_EMAIL'])
Run Code Online (Sandbox Code Playgroud)

该消息将包含图像中的以下信息。您可以阅读有关aws AWS Elastic Beanstalk 工作线程环境的更多信息

在此输入图像描述