【问题标题】:Mongoid and Sidekiq, tenant propagationMongoid 和 Sidekiq,租户传播
【发布时间】:2014-06-08 10:17:46
【问题描述】:

在我使用 mongodb 和 rails 构建的应用程序中,我想使用 sidekiq 构建一定数量的处理器来处理和转换数据并将其保存到 mongodb。为了与 mongodb 交互,我使用了 mongoid。对于多租户环境,为了不将每个服务的“路由”信息(租户)传递到每个工作人员上的持久单元,mongoid 建议使用 Thread.current 使用 store_in 类宏提取信息,即:

class Band
  include Mongoid::Document
  store_in database: ->{ Thread.current[:database] }
end

我也在使用分片,所以我的集合名称也取决于动态参数,所以解决方案类似于:

  store_in collection: ->{ Thread.current[:collection] }

我的问题是:在sidekiq worker下使用mongoid的Thread.current和store_in宏如何节省?,使用时需要注意什么?,有没有其他解决方案?

【问题讨论】:

  • 您可以考虑使用 Celluloid 在这种特定情况下可能比 sidekiq 更好...导致赛璐珞内部使用线程正常工作

标签: ruby-on-rails mongodb thread-safety mongoid sidekiq


【解决方案1】:

请参阅 Middleware sidekiq wiki 页面。

【讨论】:

  • 嗨,迈克,非常感谢您的回复,您是否推荐使用中间件,因为 a)在 sidekiq 工作人员下使用 Thread.current 是不安全的,或者 b)它是获取/设置全局的透明方式sidekiq 上的客户端-服务器通信数据
  • 这是在所有工作人员执行之前为他们设置集合的方法。您想完全按照这种模式进行操作:github.com/mperham/sidekiq/blob/master/lib/sidekiq/middleware/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多