2017-02-03 3 views
1

У меня проблема с MassTransit на Azure и настройка MaxConcurrentCalls на шине. У меня есть процесс, который требует выполнения 1 сообщения за раз, но я не могу добиться этого, используя конфигурацию шины. Например, во время конфигурации шины я установил следующийMasstransit MaxConcurrentCalls установка на Azure игнорируется

busConfigurator.MaxConcurrentCalls = 1; 
busConfigurator.PrefetchCount = 0; 

После того как я зарегистрировал свой потребитель, я затем отправить 3 сообщения в конечную точку немедленно, и 3 потребительских экземпляров сразу же создается и начинает обработку. Фрагмент журналов из Log4Net ниже.

Мне интересно, кто-нибудь еще испытал эту проблему и как они, возможно, ее разрешили, или имеют представление о том, что я могу делать неправильно. Как видно из журналов ниже, эти сообщения начинают выполняться немедленно, хотя каждый из них займет около 10-15 секунд для обработки.

[2017-02-03 16:48:18,410] [DEBUG] [13] [svcbus.Consumers.SellerPageConsumer] [Consume] [] [Loading page https://....... ]  
[2017-02-03 16:48:18,410] [DEBUG] [14] [svcbus.Consumers.SellerPageConsumer] [Consume] [] [Loading page https://....... ]  
[2017-02-03 16:48:18,420] [DEBUG] [23] [svcbus.Consumers.SellerPageConsumer] [Consume] [] [Loading page https://....... ]  

ответ

1

Update
Я посмотрел через Azure свойств конфигурации.
При настройке конечной точки приема вы можете установить MaxConcurrentCalls и PrefechCount.
Это должны работы

configurator.ReceiveEndpoint(host,"QueueName", re => 
{ 
    re.MaxConcurrentCalls = 1; 
    re.PrefetchCount = 1; 
    //configure consumers & other stuff here ... 
}); 

Старый ответ
Не лазурь специфична, но на RabbitMQ я установить максимальное количество одновременных потребителей путем вызова UseConcurrencyLimit на объекте конфигуратор например

bus = MassTransit.Bus.Factory.CreateUsingRabbitMq(configurator => 
{ 
    configurator.UseConcurrencyLimit(options.MaxConcurrentConsumers); 
    . . . 
} 

Есть ли что-то подобное на конфигураторе Azure?

+0

Извините, ничего подобного там для Azure. Просто настройка, как упоминалось выше, например busConfigurator.MaxConcurrentCalls = 1. – Bigtoe

+0

Да, это сработало, я только что загрузил код MT и нашел то же самое. Я не уверен, что это по дизайну или нет. Я выложу проблему в проект на GitHub и посмотрю, что из этого выйдет. – Bigtoe

+2

По дизайну каждая конечная точка приема имеет свою собственную конфигурацию. –

Смежные вопросы