[英]AWS SQS : How do I know that I am processing the last message?
massPayoutExecute:
handler: lambda/execute.php
timeout: 120 # 2 minutes
layers:
- arn:aws:lambda:#{AWS::Region}:<ACCOUNT::ID>:layer:php-81:1
reservedConcurrency: 10
role: MyRole
events:
- sqs:
arn: !GetAtt MyQueue.Arn
batchSize: 1
maximumBatchingWindow: 60
...
MyQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${opt:stage}-${opt:client}-MyQueue
VisibilityTimeout: 900
DelaySeconds: 300
例如,對於 500 條消息,我有這些對象:
1 Object Parent:
{
"id": 123,
"iteration": 0,
"numberOfChild": 500
}
500 Object Child:
{
"parentId": 123,
"treated": false
}
Parent
和 500 個對象Child
,並將Parent::numberOfChild
設置為 500。Child::treated
和Parent::iteration
的條目。Parent
object 是新的時, Parent::iteration
等於 0 並且 Lambda 02 必須為它收到的每條消息遞增此數字。我的問題:
Lambda 02 設法完美更新所有Child
對象,但未能正確更新Parent::iteration
的增量。
在我的代碼中,我將Parent::iteration
的值與Parent::numberOfChild
的值進行比較以繼續新的進程。
如果 Lambda 02 有一個reservedConcurrency = 1
,它完美地工作(我達到了Parent::iteration
等於Parent::numberOfChild
的地步)但是,如果reservedConcurrency = 10
, Parent::iteration
沒有正確更新並且我從來沒有Parent::iteration
等於Parent::numberOfChild
。
我絕對想將並發保持在 10。
我的問題:
你知道我怎么知道 Lambda 02 處理 SQS 收到的最后一條消息嗎?
我不想使用 FIFO SQS。
感謝@luk2302 和@mark-b,當我使用原子計數器https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.AtomicCounters更新Parent::iteration
時,它正在工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.