Рабочая роль, использующая секционированную очередь сеанса — MessageSessionHandler или AcceptMessageSessionAsync

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

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

Как лучше всего их потреблять, используя MessageSessionClass или выполняя AcceptMessageSessionAsync и OnMessageAsync(messagehandler)?

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


person Daniel Goncalves    schedule 03.06.2015    source источник


Ответы (1)


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

Суть в том, что вы реализуете 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);
}
person John Hoerr    schedule 11.08.2015
comment
Джон Хорр, ссылка на использование OnMessageAsync больше недействительна - person Horia Toma; 29.02.2016
comment
Спасибо, Ричард. Вместо этого я не смог найти обновленную версию, связанную с документами MSDN. :\ - person John Hoerr; 01.03.2016