Sidekiq:传递一个对象作为参数

时间:2016-05-03 13:37:17

标签: ruby-on-rails sidekiq

我有一个sidekiq worker连接到远程odbc数据库,获取数据然后更新本地数据库。现在我把工人分成两个工人。一个将连接并获取数据,另一个将更新记录。

连接返回一个对象#<OCI8::Cursor:0x00000007703f30>,我将参数传递给第二个工作人员。

SecondWorker.perform_async({:odbc => connection})

在第二个工作人员中,我试图使用它:

def perform(options)
  order_odbc = options['odbc']
end

但它将对象视为字符串

"#<OCI8::Cursor:0x00000006bddf48>":String

有没有其他方法可以在参数中传递对象?

2 个答案:

答案 0 :(得分:3)

Sidekiq recommends将作业参数作为简单数据类型(stringinteger等)传递。

我的问题 - 我认识到这可能不是您的业务规则和约束中的一个选项 - 是“您真的需要第二个工人”吗?

我可能会看一个服务或其他班级做这项工作的选项;而不是踢另一个工人。

# Inside First Worker 
SomeCoolClass.delay.method(params)

使用delay,该方法将异步处理,并且根据我的经验,我在这种情况下没有遇到复杂对象的问题(与我将复杂对象/数据传递给工作者时遇到的问题) 。

正如我所提到的,可能不适用于您的应用程序但想提供建议,因为它在我的用例中对我有用。

答案 1 :(得分:0)

您可以在哈希中转换对象。这不是最好的方法,但它有效。

更多信息here将对象转换为哈希值。