使用来自 AWS SQS 的消息时如何使用 MassTransit 创建心跳
How to create a heartbeat using MassTransit when consuming a message from AWS SQS
将 MassTransit 与 AWS SQS(简单队列服务)结合使用,我们希望按照 AWS 文档中的建议实施 heartbeat:
If you don't know how long it takes to process a message, create a heartbeat for your consumer process.
这需要通过代码更改消息的可见性。在我们的案例中,AWS 提供了 ChangeMessageVisibility API for this. MassTransit does not seem to support this native AWS interface. Which is still no problem by itself, as it boils down to calling a HTTP endpoint (or using the SQSClient SDK, C#)。
为此,需要 RequestHandle
。当使用 AWS CLI 接收消息时,它是原始响应的一部分 (aws sqs receive-message --queue-url http://localhost:4566/queue/my-qeueu
)。
{
"MessageId": "878eb3d8-2d1e-406f-87b6-24a3d493f5a9",
"ReceiptHandle": "878eb3d8-2d1e-406f-87b6-24a3d493f5a9#464f467d-82a9-421f-bc10-cddd63630b7d",
...left out for brevity
}
现在,在检查 ConsumeContext<TMyMessage>.ReceiveContext.TransportHeaders['MessageId']
时,消息 ID 在 运行 时已知。然而,RequestHandle
无处可寻,至少看起来是这样。
那么如何更改 AWS SQS 队列中消息的可见性超时,由 MassTransit 消费者使用?
由于这是 GitHub Discussions 上提出的相同问题的重复,相同的答案是 MassTransit 会自动延长可见性超时,直到消费者完成。
最多 SQS 允许的 12 小时。
将 MassTransit 与 AWS SQS(简单队列服务)结合使用,我们希望按照 AWS 文档中的建议实施 heartbeat:
If you don't know how long it takes to process a message, create a heartbeat for your consumer process.
这需要通过代码更改消息的可见性。在我们的案例中,AWS 提供了 ChangeMessageVisibility API for this. MassTransit does not seem to support this native AWS interface. Which is still no problem by itself, as it boils down to calling a HTTP endpoint (or using the SQSClient SDK, C#)。
为此,需要 RequestHandle
。当使用 AWS CLI 接收消息时,它是原始响应的一部分 (aws sqs receive-message --queue-url http://localhost:4566/queue/my-qeueu
)。
{
"MessageId": "878eb3d8-2d1e-406f-87b6-24a3d493f5a9",
"ReceiptHandle": "878eb3d8-2d1e-406f-87b6-24a3d493f5a9#464f467d-82a9-421f-bc10-cddd63630b7d",
...left out for brevity
}
现在,在检查 ConsumeContext<TMyMessage>.ReceiveContext.TransportHeaders['MessageId']
时,消息 ID 在 运行 时已知。然而,RequestHandle
无处可寻,至少看起来是这样。
那么如何更改 AWS SQS 队列中消息的可见性超时,由 MassTransit 消费者使用?
由于这是 GitHub Discussions 上提出的相同问题的重复,相同的答案是 MassTransit 会自动延长可见性超时,直到消费者完成。
最多 SQS 允许的 12 小时。