此问题通过可实施Sidekiq作业的方式处理性能和优化问题。在Sidekiq作业结束之前释放ActiveRecord连接
假设我们有以下的作业工作流
在步骤1闪避执行
# Step 1 do_things_with_activerecord_db_and_get_some_parameters() # Step 2 step2_perform_an_http_request_with_these_parameters_on_unreliable_server()
端
在以下的情况下,一个ActiveRecord连接从池中取出,并且只有在SideKiq的ActiveRecord中间件完成(或失败)工作后才会由SideKiq发布。
由于我们做请求的步骤2中的外部http服务器不可靠,因此http请求可能需要很长时间甚至超时,因此ActiveRecord连接永远都是锁定的,对吗?
所以我的问题是:是否有相关性,实用性和安全调用:
的ActiveRecord :: Base.clear_active_connections!
在步骤1和步骤2之间,这样作业可以自己释放资源并使其可用于其他类似的作业?或者我错过了关于连接池的东西?此方法是否也可以应用于redis连接?
感谢提前!
使用with_connection是在这里做正确的事情。您的确保块不是必需的。 –
@MikePerham在使用with_connection连续泄露JMS消息处理器中的连接之后,添加了确保块。 – mcfinnigan
非常感谢您对这两个非常明确的答案,这对我来说很有意义。我借此机会感谢并祝贺Mike的杰出框架。 – Ben