#.net-core #amazon-sqs
#.net-core #amazon-sqs
Вопрос:
Я пишу приложение, в котором я хочу использовать сообщения SQS. Я создал BackgroundService и зарегистрировал его при запуске. Работает как шарм. Проблема в том, что он обрабатывает сообщения одно за другим, в то время как аппаратное обеспечение способно обрабатывать десятки сообщений параллельно на одном компьютере. (Простым решением было бы использовать лямбды AWS, но, допустим, я этого не хочу).
Возможно ли каким-то образом иметь динамическое количество фоновых рабочих, которые будут создаваться, когда в очереди будет больше сообщений, и уничтожаться, когда сообщений будет меньше?
Я рассматриваю возможность наличия одного основного фонового процесса, который будет запускаться каждые 1 секунду и проверять количество сообщений в очереди. Затем, в зависимости от количества сообщений, ожидающих в очереди, будет создано до 10-20 рабочих. Каждый рабочий при запуске (отличном от запуска сервера) будет опрашивать SQS, обрабатывать его сообщения и затем опрашивать снова. Когда опрос возвращает нулевые сообщения, это означает, что этот рабочий должен завершить себя.
Моя единственная идея состоит в том, чтобы:
- реализовать основной фоновый процесс как фоновый сервис (IHostedService)
- внедрить workers как
Task.Run(() => ... )
но это довольно вонючий подход. Есть ли что-нибудь лучше для решения такой проблемы?
Комментарии:
1. Если вы извлекаете сообщения из SQS, вы можете извлекать максимум 10 сообщений в одном запросе.
2. @ShivanshuGupta я знаю. Но какое это имеет отношение к моему вопросу?