我有一个sidekiq worker连接到远程odbc数据库,获取数据然后更新本地数据库。现在我把工人分成两个工人。一个将连接并获取数据,另一个将更新记录。
连接返回一个对象#<OCI8::Cursor:0x00000007703f30>
,我将参数传递给第二个工作人员。
SecondWorker.perform_async({:odbc => connection})
在第二个工作人员中,我试图使用它:
def perform(options)
order_odbc = options['odbc']
end
但它将对象视为字符串
"#<OCI8::Cursor:0x00000006bddf48>":String
有没有其他方法可以在参数中传递对象?
答案 0 :(得分:3)
Sidekiq recommends将作业参数作为简单数据类型(string
,integer
等)传递。
我的问题 - 我认识到这可能不是您的业务规则和约束中的一个选项 - 是“您真的需要第二个工人”吗?
我可能会看一个服务或其他班级做这项工作的选项;而不是踢另一个工人。
# Inside First Worker
SomeCoolClass.delay.method(params)
使用delay
,该方法将异步处理,并且根据我的经验,我在这种情况下没有遇到复杂对象的问题(与我将复杂对象/数据传递给工作者时遇到的问题) 。
正如我所提到的,可能不适用于您的应用程序但想提供建议,因为它在我的用例中对我有用。
答案 1 :(得分:0)
您可以在哈希中转换对象。这不是最好的方法,但它有效。
更多信息here将对象转换为哈希值。