У меня есть веб-интерфейс, обрабатывающий веб-хуки и отправляющий сообщения бэкэнд-работнику.Эти сообщения принадлежат разным организациям, каждое сообщение имеет следующий формат:
class Message{
int OrganizationId {get;set;}
string Payload {get;set;}
}
Сегодня серверная часть обработки реализована в виде веб-задания Azure.Webjob - это простое консольное приложение, перехватывающее сообщения, отправленные с внешнего интерфейса.Консольное приложение выводит список всех организаций, ожидающих в очереди, и создает поток для каждой из них, чтобы сообщения могли обрабатываться параллельно для каждой организации.
К сожалению, веб-задания Azure не так хорошо масштабируются (причины одинаковыстроки, описанные в этой статье ).Мы планируем перенести задачи фоновой обработки в Кубернетес.В идеале сообщения каждой организации должны обрабатываться в контейнере.Эти контейнеры будут сгруппированы в группы по 5 в каждой капсуле.
Несмотря на простоту настройки модуля, мы не можем найти способ автоматического и непрерывного обнаружения организаций в очереди сообщений и запуска контейнера с идентификатором организации в качестве параметра.
Примечание. Текущая реализация не позволяет нам разбивать сообщения каждой организации на отдельную очередь, поскольку тысячи организаций могут одновременно отправлять сообщения в очередь.