Что контролирует, когда истекает блокировка MessageSession, если клиент не может вызвать Close? - PullRequest
0 голосов
/ 11 марта 2019

Контекст : в документации MSDN об очередях служебной шины и сеансах сообщений говорится: «Когда объект MessageSession принят, и пока он удерживается клиентом, этот клиент имеет эксклюзивную блокировку всех сообщений с SessionId этого сеанса».которые существуют в очереди или подписке, а также во всех сообщениях с этим SessionId, которые все еще поступают во время удержания сеанса.

Блокировка снимается при вызове Close или CloseAsync, или когда истекает срок блокировкив случаях, когда приложение не может выполнить операцию закрытия"

Моя интерпретация : я интерпретирую вышеизложенное, чтобы означать, что MessageSession заблокирован в сеансе очередиИменно поэтому другие клиенты не могут вызвать AcceptMessageSessionAsync с тем же SessionID - они получат SessionCannotBeLockedException.

Вопрос : Предполагая, что моя интерпретация точна, что контролирует , когда блокировка 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();

1 Ответ

1 голос
/ 12 марта 2019

Ваша интерпретация верна. Что контролирует блокировку сеанса, так это соединение с брокером. Как только соединение потеряно, сеанс может быть открыт другим клиентом. LockDuration для отдельных сообщений, а не для сеанса. Таким образом, пока клиент подключен к брокеру с открытым сеансом, этот сеанс будет оставаться заблокированным. Как только соединение потеряно, сеанс будет открыт другим запрашивающим клиентом. Но только один клиент одновременно может обеспечить обработку заказанных сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...