当前位置: 首页 > 知识库问答 >
问题:

SQS事件桥每分钟一次

扶绍辉
2023-03-14

我们正在查看事件桥,以便每分钟向SQS添加一次预定任务。

我们正在寻找事件桥来实现它。到目前为止,它正确地将消息放入队列中,但我们尝试将其安排为每分钟一次,并注意到队列每五分钟只接收一次消息,有时是六分钟。

这些指标似乎表示调用正在发生;但是,队列没有在指定的时间框架内接收它们。

考虑因素

  • SQS FIFO队列-重复数据消除

在规定的时间间隔内看不到消息的“duh”是因为AWS文档中的这一点:

用于删除重复发送的消息的令牌。如果成功发送了具有特定消息重复删除ID的消息,则成功接受了使用相同消息重复删除ID发送的任何消息,但在5分钟重复删除间隔内没有发送

对建议持开放态度,并将寻找解决方法

使现代化

我尝试使用输入变压器来修复,通过添加时间作为队列消息中唯一更改的项目;然而,仍然没有低于5分钟。

可变输入

{"addedOn":"$.time"}

消息

{"AddedOn":<addedOn>}

共有1个答案

沈凯康
2023-03-14

SQS中内置的队列轮询并没有轮询我更新的超过10条消息的计数。一旦我删除了旧的消息,时间是正确的,它每分钟更新1次。

答案是,如果要使用常量字符串,那么它必须用于大于5分钟的计划作业。

在这里添加信息,尽管链接谷歌搜索的问题冗余:

用于删除重复发送的消息的令牌。如果成功发送了具有特定消息重复删除ID的消息,则成功接受了使用相同消息重复删除ID发送的任何消息,但在5分钟重复删除间隔内没有发送

尽管消息是每分钟一次的唯一事件,但不唯一的常量(JSON文本)仍然将其视为要删除的副本。

为了解决我切换到输入变压器

示例事件以及可以添加为变量的其他字段:

{
 "version": "0",
 "id": "7bf73129-1428-4cd3-a780-95db273d1602",
 "detail-type": "EC2 Instance State-change Notification",
 "source": "aws.ec2",
 "account": "123456789012",
 "time": "2015-11-11T21:29:54Z",
 "region": "us-east-1",
 "resources": [
 "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"
 ],
 "detail": {
 "instance-id": "i-0123456789",
 "state": "RUNNING"
 }
}

我需要一个唯一的变量,所以时间是一个明显的选择。

输入变压器的输入

输入路径:

{"addedOn":"$.time"}

模板:

{"AddedOn":<addedOn>}

文档

此外,发现如果不使用FIFO队列对未来的SQS开发人员来说也是一个简单的选择,那么转向不使用FIFO队列是一个潜在的解决方案。

 类似资料:
  • 我在Burp Suit Free Edition V1.7.03 的入侵者选项卡中,我能够进行攻击,通常是HTTP请求,但我希望HTTP请求应该每10分钟发出一次,而不是默认的3秒时间间隔(大约)

  • 如何每5分钟左右运行一个PHP文件?我尝试使用cron,但它似乎不起作用。假设我想让我的网站运行一个播放声音的php文件。如何使php文件每5分钟运行一次,使声音每5分钟播放一次。我知道JavaScript可以做到这一点,因此函数可以按设定的间隔运行,但我希望文件也这样做。 这样做的原因是我正在创建一个网站,我希望用户得到实时通知。为了做到这一点,我需要运行php文件,以便它可以检测用户通知的更改

  • 我正在用Log4j 2.6.2测试Log4j RollingFileAppender。 我希望每分钟旋转一次日志,因此我有一个log4j2.xml,与这里的一个示例https://logging.apache.org/log4j/2.x/manual/appenders.html#rollingfileappender非常相似。这是我的log4j2.xml 这是一个我每秒钟写一个日志的应用程序。

  • 问题内容: 我是node.js的新手。我需要node.js每五分钟查询一次mongodb,获取特定数据,然后使用socket.io,允许已订阅的Web客户端访问此数据。我已经设置了socket.io部分,当然还有mongo,我只需要知道如何每隔五分钟运行一次node.js然后发布到socket.io。 最好的解决方案是什么? 谢谢 问题答案: 将该代码另存为node_regular_job.js并

  • 问题内容: 我想在Java中编写一个会启动并运行的循环,如下所示: 我要这样做,以免占用系统资源。代码中实际发生的事情是,它进入一个网站并检查是否已完成某件事,如果未完成,则应等待一分钟,直到再次检查为止,然后再继续检查。反正他们在Java中执行此操作吗? 问题答案: 使用。 根据系统计时器和调度程序的精度和准确性,使当前正在执行的线程进入休眠状态(暂时停止执行)达指定的毫秒数。该线程不会失去任何

  • 问题内容: 我想尝试通过以下方式使用@Schedule批注: 根据日志,CronService运行良好,但是计划的任务“ runsEveryMinute”不起作用。 使用EJB计划任务如何工作? 问题答案: 按照该Javadoc中的注释,默认值是: 除小时,分钟和秒外的所有字段;和 默认情况下为小时,分钟和秒。 通过将小时值保留为默认值,它要求计时器在午夜之后每分钟运行一小时(即00:00、00: