0

У меня есть очередь служебной шины с несколькими сеансами, которые я использую как способ обеспечения порядка для каждого объекта.Рабочая роль, потребляющая сеансовую секционированную очередь - MessageSessionHandler или AcceptMessageSessionAsync

И мне нужна рабочая роль для чтения сообщений из этой очереди и чтения сообщений с любого сеанса, чтобы при чтении сообщения из сеанса никакой другой экземпляр этой роли не получал сообщения с этого сеанса.

Что было бы лучшим способом их использовать, используя MessageSessionClass или имея AcceptMessageSessionAsync и OnMessageAsync(messagehandler)?

Нелегко понять, какой метод лучше подходит для рабочей роли.

ответ

1

Azure SDK 2.3 представил поддержку для понимания сеанса при использовании OnMessageAsync. См. sparse MSDN Documentation.

Суть в том, что вы будете реализовывать MessageSessionAsyncHandler для обработки сообщений для данной сессии:

class MySessionHandler : MessageSessionAsyncHandler 
{ 
    protected override async Task OnMessageAsync(MessageSession session, BrokeredMessage message) 
    { 
     // Do the work here 
    } 
} 

Тогда вы будете зарегистрировать этот тип с клиентом очереди. Вы можете указать, сколько сеансов вы хотите одновременно процесс, среди других вариантов:

public override bool OnStart() 
{ 
    QueueClient client = ...; 
    var options = new SessionHandlerOptions(){ MaxConcurrentSessions = 3 } 
    client.RegisterSessionHandler(typeof(MySessionHandler), options); 
} 
+0

Джон Hoerr, ссылка на использование OnMessageAsync больше не действительна –

+0

Спасибо Ричард. Я не мог найти обновленную версию, которая была бы привязана к документам MSDN. : \ –