Amazon web services 如何在弹性Beanstalk服务器上模拟发送周期性任务?

Amazon web services 如何在弹性Beanstalk服务器上模拟发送周期性任务?,amazon-web-services,amazon-ec2,amazon-elastic-beanstalk,amazon-sqs,Amazon Web Services,Amazon Ec2,Amazon Elastic Beanstalk,Amazon Sqs,我已经设置了一个弹性Beanstalk服务器,工作层。它有一个cron.yaml,每小时运行一个任务,如下所示: version: 1 cron: - name: "broadcast-users" url: "/broadcast" schedule: "0 * * * *" 我知道它是通过SQS向工作队列发送一条消息,然后由该路径接收的,但我不知道该消息是什么样子。我希望能够轻松地测试cron作业,而不必等待预定的时间 有人知道SQS发出的消息是什么样的吗?(或者我如何检查发

我已经设置了一个弹性Beanstalk服务器,工作层。它有一个cron.yaml,每小时运行一个任务,如下所示:

version: 1
cron:
 - name: "broadcast-users"
   url: "/broadcast"
   schedule: "0 * * * *"
我知道它是通过SQS向工作队列发送一条消息,然后由该路径接收的,但我不知道该消息是什么样子。我希望能够轻松地测试cron作业,而不必等待预定的时间

有人知道SQS发出的消息是什么样的吗?(或者我如何检查发送给SQS的消息的内容?)


谢谢

您应该能够使用SQS控制台查看消息的内容。消息可能会以死信队列结束

也就是说,消息内容应该如下所示:

{ "taskurl": "broadcast", "taskname": "broadcast-users" }
您还可以使用SQS控制台手动发送消息:

  • 选择适当的队列
  • 从“队列操作”下拉列表中选择“发送消息”
  • 输入JSON消息正文(例如
    {“taskurl”:“broadcast”,“taskname”:“broadcast users”}
    )并单击“发送消息”

在控制器中,您可以查看
X-Aws-Sqsd-Taskname
标题以确定调用了哪个任务。

如果您是从Aws SQS控制台发送,请尝试以下操作

消息正文
选项卡中,放入
elasticbeanstalk计划作业

消息属性中,输入以下内容:

Name: beanstalk.sqsd.path
Type: String
Value: jobs/example-job <- Whatever the URL of  your job is

Name: beanstalk.sqsd.scheduled_time
Type: String
Value: '2018-04-07T20:38:00-04:00' <- When you want it scheduled
Name:beanstalk.sqsd.path
类型:字符串

Value:jobs/example jobAmazon在他们的知识中心()回答了这个问题。简而言之,您可以使用SSH连接到worker,并使用
curl
通过作业的URL立即测试作业

curl -H "Content-Type: application/json" -X POST http://localhost/<path>
转到AWS SQS gui(例如)并选择您的队列。如果您不知道自己的队列,请导航到EBS worker configuration并查看worker部分。注意工作队列URL,并选择URL的最后一部分。应该是这样的
awseb-e-3j7sjaqxre-stack-AWSEBWorkerQueue-3WR7QFDPTDEH1
。在队列列表中搜索此消息,选择并单击
发送和接收消息
按钮

消息正文文本区域中放入
elasticbeanstalk计划作业

添加三个消息属性

Name: beanstalk.sqsd.path
Type: String
Custom Type: (empty)
Value: /jobs/example-job <- cron.url from your cron.yaml

Name: beanstalk.sqsd.task_name
Type: String
Custom Type: (empty)
Value: example-job <- cron.name from your cron.yaml

Name: beanstalk.sqsd.scheduled_time
Type: String
Custom Type: (empty)
Value: '2020-12-06T11:07:00+01:00' <- It did not work without this entry
Name:beanstalk.sqsd.path
类型:字符串
自定义类型:(空)

Value:/jobs/example job My worker在/worker路由上处理SQS消息,并在/broadcast路由上接收cron任务。当我尝试发送该消息时,它被/worker路由接收。JSON中是否有将其发送到/broadcast的属性?(也许我误解了cron处理的工作原理,也许它根本不会从SQS触发?)如果您通过SQS控制台手动发送消息,它将被发送到您在ElasticBeanstalk中配置的任何端点。
cron.yaml
中定义的任务可以通过
url
参数发送到任意端点。您是如何获得
sqsd
的属性名称的?我想了解
beanstalk sqsd
的可能配置。
Name: beanstalk.sqsd.path
Type: String
Custom Type: (empty)
Value: /jobs/example-job <- cron.url from your cron.yaml

Name: beanstalk.sqsd.task_name
Type: String
Custom Type: (empty)
Value: example-job <- cron.name from your cron.yaml

Name: beanstalk.sqsd.scheduled_time
Type: String
Custom Type: (empty)
Value: '2020-12-06T11:07:00+01:00' <- It did not work without this entry