amazon-web-services - AWS Step Functions SendSQSMessage:动态 MessageGroupId
问题描述
我正在使用 AWS CDK 创建一个状态机,该状态机将消息发送到 fifo 队列并等待来自 lambda worker 的回调以继续执行。
我希望发送到 fifo 队列的消息有一个动态 MessageGroupId 分配给它们,这样我就可以控制处理消息的 lambda 工作人员的数量。我能想到的拥有动态 MessageGroupId 的唯一方法是使用 JsonPath 在步进函数输入上引用一些参数,但是我没有遇到任何关于它的文档。我使用 JsonPath 动态传递 MessageGroupId 的初始测试失败了,只是传递了字符串“$.MessageGroupId”,有效地为每条消息提供了相同的消息组 id,从而为一个 lambda 工作人员。
- 从步进函数发送时,是否可以将消息组 ID 动态分配给 sqs 消息?
- 如果是这样,怎么做?
解决方案
在 AWS Support 的帮助下,我设法通过使用上下文对象或从初始输入传递一个 ID 并使用$
.
这是一个例子:
{
"Comment": "Generate unique MessageGroupId",
"StartAt": "Start",
"States": {
"Start": {
"Type": "Task",
"TimeoutSeconds": 60,
"Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Parameters": {
"QueueUrl": "<YOUR_QUEUE_URL>",
"MessageBody": {
"Input.$": "$",
"TaskToken.$": "$$.Task.Token"
},
"MessageGroupId.$": "$$.Execution.Id"
},
"ResultPath": "$",
"End": true
}
}
}
我的问题是我试图MessageGroupId
这样:
"MessageGroupId": "$$.Execution.Id"
我应该在哪里做:
"MessageGroupId.$": "$$.Execution.Id"
附加.$
将解析表达式"$$.Execution.Id"
,而不是按字面意思输入 string "$$.Execution.Id"
。
推荐阅读
- angularjs - Angular 1.4 应用程序中的 React 组件
- c# - iOS webapp 闪屏缓存
- python - SQLalchemy:自动对列应用过滤器
- c - 将指针数组传递给C中的函数
- mysql - Mysql从字符串中提取最大数量
- python-3.x - Python:使用 exec 创建 TKINTER Checkbutton 时键入错误
- postgresql - 非唯一索引一起使用时如何强制“postgresql”使用唯一索引
- nativescript - StackLayout 的垂直对齐方式
- command-line-interface - Wildfly 14 CLI 编辑默认 jgroups
- c# - nullcheck 真的适用于 statebag 吗?