Это нормально иметь долго запущенные процессы в NServiceBus с транспортом SQL Server? - PullRequest
0 голосов
/ 27 мая 2019

У меня давно запущен процесс в обработчике сообщений, я заметил, что не могу читать из таблицы, пока задача находится в процессе.

Это нормально?

Или есть ли лучший способ обработки длительных процессов?

Мой транспорт - SQL Server.

Заранее спасибо:)

public class HandlerAwaitsTheTask : IHandleMessages<CommandMessage>
{
    public async Task Handle(CommandMessage message, IMessageHandlerContext context)
    {
        await SomeLibrary.VeryVeryVeryLongTask(message);
    } 
}

1 Ответ

0 голосов
/ 28 мая 2019

Это зависит. : -)

Сколько длится "VeryVeryVeryLong"? 2 минуты? два часа? 2 дня? Какая таблица заблокирована? Блокировка всего стола кажется, что что-то не так. Это вряд ли может быть очередь, потому что она должна блокировать только одну или несколько строк для извлечения сообщений. Так что, скорее всего, это ваш собственный стол.

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

Это не значит, что у вас не может быть очень длинных задач и длительных блокировок, но в зависимости от того, как долго, SQL Server или другие вещи могут начать жаловаться. Пропускная способность также может быть ограничена. Возможно, нам нужно больше контекста, чтобы увидеть, что происходит и что вам нужно.

Вы также можете связаться с support@particular.net для получения дополнительной информации и поддержки.

...