从不同的线程调用 ServiceBus 的 IQueueClient.CompleteAsync() 总是失败

Calling ServiceBus' IQueueClient.CompleteAsync() from a different thread always fails

我正在使用 IQueueClient.RegisterMessageHandler() 从队列中接收数据,然后在接收方法中我启动了一个 Hangfire 任务。但是在 Hangfire 任务中,所有调用 IQueueClient.CompleteAsync() 以将消息标记为已消耗(因为我使用的是 ReceiveMode.PeekLock 模式)都失败了。

我怀疑是因为 Hangfire 任务重新创建了 IQueueClient,这可能是因为对 CompleteAsync() 的调用来自 IQueueClient 的不同实例?还是其他事情可能出了问题?我将 Message.SystemProperties.LockToken 传递给 Hangfire 任务,然后 CompleteAsync.

正在使用它

I suspect it's because the Hangfire task re-creates the IQueueClient, that it may be because the call to CompleteAsync() is from a different instance of IQueueClient?

没错。 LockToken 不足以完成消息。您必须使用用于接收消息的同一客户端才能完成它。