nservicebus db вставить дубликат
У нас есть служба загрузчика данных, которая использует NServiceBus для вставки данных (если их еще нет) в базу данных SQL. Очередь настроена с Concurrencylevel > 1, поскольку данные для загрузки могут быть огромными. Поскольку уровень параллелизма> 1, это приводит к дублированию вставок. Есть ли способ справиться с этим в NServiceBus.
Примечание: мы уже рассмотрели и исключили создание потоковых замков
1 ответ
Вообще говоря, нет необходимости запускать конечную точку с уровнем параллелизма, равным единице. Вам также не нужно управлять потоками и работать с параллелизмом / блокировками, когда дело доходит до NServiceBus. Существуют и другие факторы того, как система должна быть спроектирована, чтобы она работала:
Различные транспорты имеют разные уровни поддержки транзакций. Выберите тот, который поддерживает транзакции. Это означает, что если сообщение будет повторено, вы не получите дублированные сообщения / данные.
Попробуйте работать с вашей системой с идемпотентностью. Это означает, что при отсутствии транзакций (не поддерживаемых транспортом или отключенных кодом), если вы обработаете сообщение дважды, у вас не будет нескольких данных / побочных эффектов. Часть "как" требует лучшего знания о данных, с которыми вы имеете дело, и о вашем домене.