0

我正在使用 Windows azure 服务总线进行消息传递。我们创建了 web api 来从服务总线中提取消息。移动应用程序正在使用此 Web api 来获取消息。我们在订阅客户端使用 PeekLock 模式,锁定时间为 5 分钟。

在客户端,如果消息处理时间超过 5 分钟,则消息将解锁。所以在解锁之前我们要更新锁。所以我们创建了另一个 web api 来更新锁。在 web api 中,我们传递 LockToken。但是当我们使用 subscriptionClient.RenewMessageLockAsync(new Guid(lockToken)) 时,它会在锁定过期时间之前抛出错误“提供的锁定无效。锁定已过期,或者消息已从队列中删除”。我们在消息 LockUntilUtc 时间的 1.5 分钟之前启动更新锁。

我的问题是我们可以在到期前更新消息锁吗?如果是,那么为什么 azure service bus throwing lock expired 错误?请帮我理解这个更新锁的事情。

4

1 回答 1

0

您可以手动延长锁,但您需要确保它在服务器解锁之前发生。

另一种我个人更喜欢的选择是使用OnMessageAPI。它允许您指定OnMessageOptions.AutoRenewTimeout延长时间,以防处理消息的回调未完成。OnMessage如果您即将超过锁定持续时间,API 还将确保调用扩展。这样,您也不需要另一个 Web API,这听起来有点不对劲。

看看我最近写的关于这个 API 的帖子。

于 2016-04-07T06:23:57.417 回答