Одновременное использование сообщений SQS в приложении .net core

#.net-core #amazon-sqs

#.net-core #amazon-sqs

Вопрос:

Я пишу приложение, в котором я хочу использовать сообщения SQS. Я создал BackgroundService и зарегистрировал его при запуске. Работает как шарм. Проблема в том, что он обрабатывает сообщения одно за другим, в то время как аппаратное обеспечение способно обрабатывать десятки сообщений параллельно на одном компьютере. (Простым решением было бы использовать лямбды AWS, но, допустим, я этого не хочу).

Возможно ли каким-то образом иметь динамическое количество фоновых рабочих, которые будут создаваться, когда в очереди будет больше сообщений, и уничтожаться, когда сообщений будет меньше?

Я рассматриваю возможность наличия одного основного фонового процесса, который будет запускаться каждые 1 секунду и проверять количество сообщений в очереди. Затем, в зависимости от количества сообщений, ожидающих в очереди, будет создано до 10-20 рабочих. Каждый рабочий при запуске (отличном от запуска сервера) будет опрашивать SQS, обрабатывать его сообщения и затем опрашивать снова. Когда опрос возвращает нулевые сообщения, это означает, что этот рабочий должен завершить себя.

Моя единственная идея состоит в том, чтобы:

  • реализовать основной фоновый процесс как фоновый сервис (IHostedService)
  • внедрить workers как Task.Run(() => ... )

но это довольно вонючий подход. Есть ли что-нибудь лучше для решения такой проблемы?

Комментарии:

1. Если вы извлекаете сообщения из SQS, вы можете извлекать максимум 10 сообщений в одном запросе.

2. @ShivanshuGupta я знаю. Но какое это имеет отношение к моему вопросу?