我正在尝试以高速处理消耗Kafka队列,并使用来自.NET Core 2.1的EF将结果存储在MySql中。我尝试过使用
1)当使用
我知道我可以添加选项以重试瞬态错误(超时就是其中之一),但我主要关心如何将
2)当使用
“尝试在配置上下文时使用上下文。 由于此时仍在配置它,因此OnConfiguring内部无法使用DbContext实例。 如果在上一个操作完成之前启动了此上下文上的第二个操作,则可能会发生这种情况。 任何实例成员都不能保证是线程安全的。”
同时,据我所知,在
因此,我的问题是如何解决这个问题?我希望将
AddDbContext
和AddDbContextPool
,但在两种情况下都遇到了问题。1)当使用
AddDbContext
时,唯一成功的方法是将其范围设置为transient
,这样每次需要调用数据插入时都会获得一个新的DataContext
实例。我的队列很大,最终连接到mqSQL服务器的连接太多,因此我开始遇到大量超时错误。我知道我可以添加选项以重试瞬态错误(超时就是其中之一),但我主要关心如何将
DataContext
实例的数量减少到不会打击数据库的数量。这使我尝试了下一个解决方案。2)当使用
AddDbContextPool
时,我无法将范围设置为transient
,找不到语法!有吗?不能在每次调用时获取新实例,我会遇到另一种奇怪的错误类型,通常可以通过短暂的生命周期解决。“尝试在配置上下文时使用上下文。 由于此时仍在配置它,因此OnConfiguring内部无法使用DbContext实例。 如果在上一个操作完成之前启动了此上下文上的第二个操作,则可能会发生这种情况。 任何实例成员都不能保证是线程安全的。”
同时,据我所知,在
AddDbContextPool
中的poolsize参数仅设置缓存大小,以重复使用DbContext
对象,并且绝不会防止总连接数。当池饱和时,我希望能够阻止下一个“get DBContext”调用,直到有一个实例可用。因此,我的问题是如何解决这个问题?我希望将
DataContext
实例的数量减少到固定数量,例如10,并对它们进行缓存。我仍然会配置选项以允许重试,但再次说明,这些超时会出现由于外部原因而不是因为我的代码创建了数百个实例,所有这些实例都试图将微小的消息保存到数据库中。