gpt4 book ai didi

azure - 如果客户端无法调用 Close,那么什么控制 MessageSession 锁何时到期?

转载 作者:行者123 更新时间:2023-12-02 06:44:37 24 4
gpt4 key购买 nike

上下文:有关服务总线队列和消息 session 的 MSDN 文档表示“当 MessageSession 对象被接受并且由客户端持有时,该客户端对该 session 的所有消息持有排他锁”存在于队列或订阅中的 SessionId,以及在 session 保持期间仍然到达的具有该 SessionId 的所有消息。

调用 Close 或 CloseAsync 时,或者当应用程序无法执行关闭操作时锁过期时,锁将被释放”

我的解释:我将上述解释为 MessageSession 对队列 session 具有锁定,这就是为什么其他客户端无法使用相同的 SessionID 调用 AcceptMessageSessionAsync - 他们会获取 SessionCannotBeLockedException。

问题:假设我的解释是准确的,在应用程序无法执行 Close 操作的情况下,什么控制 MessageSession 锁定何时过期?我知道队列上的 LockDuration 无法实现此目的,因为我尝试过。

示例代码:

var sessionClient = new SessionClient(ServiceBusConnectionString, QueueName, ReceiveMode.PeekLock);
var session = await sessionClient.AcceptMessageSessionAsync("0");
// ReceiveAsync seems to wait for 60 seconds,
// even if the LockDuration on the queue is 30 seconds.
var message = await session.ReceiveAsync();
// Once ReceiveAsync returns, I'd expect to receive a SessionLockLost
// exception at some point since the lock should expire, according to MSDN
Console.ReadKey();

最佳答案

你的解释是正确的。控制 session 锁定的是与代理的连接。一旦连接丢失, session 就可以由另一个客户端打开。 LockDuration 适用于单个消息,而不是 session 。因此,只要客户端通过打开的 session 连接到代理,该 session 就会保持锁定状态。一旦连接丢失, session 将由另一个请求客户端打开。但一次只能有一个客户端来确保有序的消息处理。

关于azure - 如果客户端无法调用 Close,那么什么控制 MessageSession 锁何时到期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109872/

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