gpt4 book ai didi

c# - 我有一个长时间运行的进程,我在服务总线队列中调用它。我希望它持续超过 5 分钟

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:05 25 4
gpt4 key购买 nike

我有一个长时间运行的进程,它在数百万条记录之间执行匹配,我使用服务总线调用此代码,但是,当我的进程超过 5 分钟限制时,Azure 会再次从头开始处理已处理的记录。

如何避免这种情况

这是我的代码:

private static async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
long receivedMessageTrasactionId = 0;
try
{
IQueueClient queueClient = new QueueClient(serviceBusConnectionString, serviceBusQueueName, ReceiveMode.PeekLock);

// Process the message
receivedMessageTrasactionId = Convert.ToInt64(Encoding.UTF8.GetString(message.Body));

// My Very Long Running Method
await DataCleanse.PerformDataCleanse(receivedMessageTrasactionId);
//Get Transaction and Metric details

await queueClient.CompleteAsync(message.SystemProperties.LockToken);
}
catch (Exception ex)
{
Log4NetErrorLogger(ex);
throw ex;
}
}

最佳答案

消息用于通知而不是长时间运行的处理。

你有几个选择:

  1. 接收消息并依赖接收者的 RenewLock() 操作来延长锁定。
  2. 使用用户回调 API 并通过 MessageHandlerOptions.MaxAutoRenewDuration 指定最大处理时间(如果已知)设置为自动更新消息锁定。
  3. 记录已开始但未完成的传入消息的处理。而是杠杆message deferral功能,向自己发送一条新的延迟消息,并引用延迟消息 SequenceNumber。这将使您定期收到“提醒”消息以查看工作是否完成。如果是,则通过其 SequenceNumber 完成延迟消息。否则,请完成“提醒”消息并发送新消息。这种方法需要对架构进行一定程度的重新设计。
  4. 与选项 3 类似,但将处理卸载到稍后报告状态的外部进程。有一些框架可以帮助您做到这一点。公共(public)交通或 NServiceBus。后者有 sample您可以下载并玩。

请注意,选项 1 和 2 得到保证,因为它们是客户端发起的操作。

关于c# - 我有一个长时间运行的进程,我在服务总线队列中调用它。我希望它持续超过 5 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54943491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com