В моем последнем проекте я использую MassTransit (2.10.1) с RabbitMQ. В некоторых сценариях производителю разрешено отправлять основную массу сообщений в очередь.Как обращаться с одним издателем, забивающим мою очередь RabbitMQ
Например, пользователь установил массовое уведомление в свой список контактов - в некоторых случаях список может составлять до 100000 контактов. Это отправит сообщение для каждого контакта в очередь (мне нужно отслеживать каждое сообщение). Теперь, поскольку, насколько я понимаю, сообщения обрабатываются в порядке входа, этот пользователь забивает очередь на большое количество времени, а другой пользователь, который, возможно, проделал простую вещь, например, отправил тестовое сообщение самому себе, ждет завершения обработки.
Я рассматривал разделение очередей для регулярных операций массового обслуживания VS, но это все еще не решает проблему для небольших объёмов (пользователь с десятками контактов, ожидающих пользователей со сто тысяч) и вызывает дополнительное обслуживание.
Идеальное решение для меня - я думаю, будет включать в себя манипулирование маршрутизацией таким образом, чтобы потребитель обрабатывал x сообщений от одного и того же пользователя, перемещал X-сообщения от следующего пользователя, чем снова, а затем перемещался назад к началу очереди, пока все сообщения не будут обработаны.
Возможно ли это? Есть ли лучшее решение?
Заранее спасибо.
Спасибо. имеет ли смысл создавать очередь для каждого пользователя в этом сценарии? – motime
С этой точки зрения сага может легко справиться с логикой, чтобы решить, используете ли вы потребителя для обработки небольших запросов или массового потребителя. 2 потребителя будут означать две отдельные очереди. – derek