Что было бы лучшим способом использовать пакеты сообщений «тема-ed» из RabbitMQ параллельно и в порядке.Потребляйте сообщения RabbitMQ с порядком и контекстом
У нас есть сервер, который обрабатывает данные для многих клиентов. Каждый раз, когда обрабатываются данные клиента, в RMQ отправляется куча сообщений. С другой стороны, у нас есть процесс, который использует данные и хранит их в базе данных.
Процесс потребления медленный, и мы хотим распараллелить его и сделать его масштабируемым. Проблема в том, что данные для одного клиента не могут одновременно обрабатываться двумя потребителями. Производитель работает время от времени и может добавлять сообщения в очередь даже для клиента, у которого уже есть сообщения в очереди.
Одним из предложений было создание новой таблицы БД, которая будет указана для каждого клиента, если данные обрабатываются. Потребитель будет запрашивать сообщения только для клиентов, которые не обрабатываются другими потребителями, и регистрируется в БД для этого клиента.
Я не хочу использовать это решение, потому что он требует подключения к базе данных и он содержит состояние выполнения в базе данных.
Я надеялся найти решение, которое может быть обработано в рамках нашего кода потребителя/производителя и RMQ.
Было высказано предположение о том, что сообщения, написанные в RMQ по «темам» клиента, и потребители читают одну «тему». Сообщение будет добавлено в отдельную очередь (или «тему») для каждого сообщения пакета или клиента. Потребитель будет получать сообщение «клиентов» и использовать его данные для выбора «темы» из основной очереди.
Проблема заключается в том, что производитель хочет добавить новые данные в основную очередь для клиента, который уже имеет данные в основной очереди, которая в настоящее время обрабатывается.
Как мы можем синхронизировать потребление продукции над RMQ?
Вы пытались использовать транзакции? У меня нет непосредственного опыта с ними, но кажется, что вы ищете (до тех пор, пока сообщения происходят из той же самой сессии производителя) – SJuan76