У меня есть система MassTransit, которая будет использовать 2 типа сообщений: один для пакетного процесса, другой для операций CRUD над одним объектом. Пока выполняется пакетный процесс, операции CRUD не должны удаляться из очереди.
Можно ли этого добиться с помощью MassTransit? Кажется, что привязка обмена -> имя типа потенциально может затруднить такое поведение.
Решением было бы использовать один тип сообщения для обозначения обеих операций, а затем опросить содержимое сообщения, чтобы различать одиночный и пакетный, но это похоже на запах кода. Кроме того, это потребует настройки параллелизма, чтобы гарантировать, что когда-либо будет активен только один потребитель.
Может ли кто-нибудь помочь здесь с альтернативным решением? По сути, нам нужно приостановить все потребление сообщений, пока выполняется процесс, управляемый событиями.
Заранее спасибо.
Под паузой вы имеете в виду, что хотите, чтобы операции CRUD могли выполняться без блокировки пакетным процессом? Поскольку, если речь идет только о том, чтобы два отдельных сообщения не мешали друг другу, наиболее логичным решением будет использование двух отдельных очередей, одна конечная точка приема для пакетного процесса, а другая - для операций CRUD.
Теперь, если вам действительно нужно разделить пакетный процесс, чтобы он не выполнялся в течение операций CRUD, это потребует дополнительной работы. А что, если вы получите операцию CRUD, когда пакетный процесс уже запущен?
Однако я думаю, что отдельные очереди - ваше лучшее решение.
Лучше всего создать две службы, по одной для каждой, и остановить одну CRUD, пока не завершится пакетная.
Спасибо, Крис. Я ожидал подобного решения,
Привет, Крис, спасибо за ответ. По сути, мне нужно, чтобы система не удаляла из очереди какие-либо сообщения CRUD во время выполнения пакетной обработки. Затем возобновите после этого. Это возможно? Еще раз спасибо.