如何在Elastic Beanstalk服务器上模拟发送周期性任务?

时间:2017-05-26 23:16:49

标签: amazon-web-services amazon-ec2 elastic-beanstalk amazon-sqs

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

version: 1
cron:
 - name: "broadcast-users"
   url: "/broadcast"
   schedule: "0 * * * *"

我知道它可以通过SQS向工作队列发送消息然后被该路由接收 - 但我不知道该消息是什么样的。我希望能够轻松地测试cron作业,而无需等待预定的时间。

有没有人从SQS那里得到什么信息来启动这个cron工作? (或者我如何检查发送到SQS的消息的内容?)

谢谢!

4 个答案:

答案 0 :(得分:2)

如果您要从AWS SQS控制台发送,请尝试此操作

Message Body标签中,添加elasticbeanstalk scheduled job

Message Attributes中,输入以下内容:

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

请注意,对于beanstalk.sqsd.path值,如果我包含一个前导斜杠,我无法使其工作,例如: /jobs/example-job导致了一个孤独的消息,而jobs/example-job工作了。

在我的cron.yaml我将网址指定为/jobs/example-job,以防您想知道。

答案 1 :(得分:1)

您应该能够使用SQS控制台查看消息的内容。该消息可能最终会出现在死信队列中。

话虽如此,消息内容应如下所示:

{ "taskurl": "broadcast", "taskname": "broadcast-users" }

您还可以使用SQS控制台手动发送消息:

  • 选择适当的队列。
  • 从“队列操作”下拉列表中选择“发送消息”。
  • 输入JSON邮件正文(例如{ "taskurl" : "broadcast", "taskname" : "broadcast-users" }),然后点击“发送邮件”。

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

答案 2 :(得分:0)

Amazon在其知识中心(here)中回答了这个问题。简而言之,您可以将SSH转换为工作程序,然后使用$ flutter --version Flutter 1.22.1 • channel stable • https://github.com/flutter/flutter.git Framework • revision f30b7f4db9 (6 days ago) • 2020-10-08 10:06:30 -0700 Engine • revision 75bef9f6c8 Tools • Dart 2.10.1 通过其URL立即测试作业...

curl

...其中curl -H "Content-Type: application/json" -X POST http://localhost/<path> 是您要测试的作业的路径。您也可以使用<path>选项传递参数:

-d

答案 3 :(得分:0)

转到AWS SQS gui(例如https://eu-central-1.console.aws.amazon.com/sqs/v2/home#/queues),然后选择您的队列。如果您不知道队列,请导航到EBS工作程序配置,并查看工作程序部分。当心工人队列URL ,然后选择URL的最后一部分。应该看起来像这样awseb-e-3j7sjaqxre-stack-AWSEBWorkerQueue-3WR7QFDPTDEH1。在队列列表中搜索,选择并单击Send and receive messages按钮。

邮件正文文本区域中,放入elasticbeanstalk scheduled job

添加三个消息属性

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

发送消息!

我不知道为什么,但是没有beanstalk.sqsd.scheduled_time属性,这项工作就没有开始。即使忽略属性值!这项工作立即开始。