因此,我使用AWS IoT Core、AWS规则引擎和AWS DynamoDB创建了一个IoT解决方案。
该解决方案如下所示: MQTT消息发布到主题" topic /+/data“,其中"+”是发布消息的内容。有一条规则可以拦截这些消息,并且应该将已发布的消息保存为DynamoDB表中的记录。问题是并非所有消息都保存在数据库中。DynamoDB表容量模式被设置为“按需”。
可能会出错的事情:
并不是所有的消息都被发布到主题流messages
那样坚持所有的消息
可以消除1和2,因为amount日志只显示与发布的消息数量相对应的成功"RuleExecution“事件,也就是说,如果有600个消息发布,那么就有600个成功的"RuleExecution”事件。还对发布的500条消息进行了测试。这些消息来自Apache JMeter的负载测试,在这些测试中,不同数量的设备每秒钟模拟发送一条消息。设备的数量从10到100,运行时间从30秒到15分不等。尽管Cloudwatch声称它们成功插入了DynamoDB表,但所有测试都导致了很大比例的消息(高达30% )没有插入到该表中。
尽管Cloudwatch确认所有"RuleExecution“事件都是成功的,但无论如何,Cloudwatch并不会插入规则拦截的所有消息。Cloudwatch也不会出现任何失败的事件。
这是什么原因?
发布于 2022-05-27 11:13:40
主键的碰撞是问题所在。通过使用timestamp()作为主键,使用traceid()作为排序键,一切都按预期工作。我现在可以在表中看到几个条目具有相同的时间戳。
需要明确的是:用于将消息插入到DynamoDB中的规则( IAM角色被裁剪出来):

https://stackoverflow.com/questions/72378722
复制相似问题