我们有一个数据加载器服务,它使用NServiceBus将数据(如果尚未存在)插入SQL DB。队列配置为Concurrencylevel> 1,因为要加载的数据可能会变得很大。自Concurrencylevel> 1,它导致重复插入。有没有办法在NServiceBus中处理这个问题。
注意:我们已经考虑并排除了创建线程安全锁
答案 0 :(得分:0)
一般来说,没有必要运行Concurrency Level为1的端点。当涉及NServiceBus时,您也不需要管理线程并使用并发/锁定。关于如何设计系统以使其工作还有其他因素:
不同的传输具有不同级别的事务支持。选择一个支持交易的。这意味着如果重试该消息,您将无法获得重复的消息/数据。
尝试使用幂等性来运行您的系统。这意味着如果您处理消息两次,由于缺少事务(传输不支持或代码禁用),将不会具有多个数据/副作用。 “如何”部分需要更好地了解您正在处理的数据和您的域名。