6 c# parallel-processing azure azureservicebus
我有一个长时间运行的进程,它在数百万条记录之间执行匹配,我使用服务总线调用此代码,但是,当我的进程超过 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;
}
}
Run Code Online (Sandbox Code Playgroud)
消息用于通知而不是长时间运行的处理。
你有几个选择:
RenewLock()操作来延长锁定。MessageHandlerOptions.MaxAutoRenewDuration设置自动更新消息锁定来指定最大处理时间(如果已知)。SequenceNumber。这将使您定期收到“提醒”消息以查看工作是否完成。如果是,则通过其完成延迟消息SequenceNumber。否则,请完成“提醒”消息并发送新消息。这种方法需要对架构进行一定程度的重新设计。请注意,选项 1 和 2 无法得到保证,因为它们是客户端启动的操作。
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |