Visibility Heartbeat
async fn visibility_heartbeat(
client: Client,
queue_url: String,
receipt: String,
token: CancellationToken,
) {
let mut interval = tokio::time::interval(Duration::from_secs(25));
loop {
tokio::select! {
_ = interval.tick() => {
client.change_message_visibility()
.queue_url(&queue_url)
.receipt_handle(&receipt)
.visibility_timeout(30)
.send().await.ok();
}
_ = token.cancelled() => break,
}
}
}
Spawn this task when processing starts; cancel the token when processing completes.