从不同的线程调用 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
不足以完成消息。您必须使用用于接收消息的同一客户端才能完成它。
我正在使用 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
不足以完成消息。您必须使用用于接收消息的同一客户端才能完成它。