【发布时间】:2020-01-25 05:26:17
【问题描述】:
Sidekiq worker 的参数应该是作者根据这个 wiki 的简单数据类型 (https://github.com/mperham/sidekiq/wiki/Best-Practices)
ActiveJob 的参数可以是复杂对象,这要归功于 Global ID (https://edgeguides.rubyonrails.org/active_job_basics.html#globalid)
ActiveJob 后端可以配置为使用 Sidekiq。
那么,当我将复杂对象传递给具有 Sidekiq 后端的 ActiveJob 工作者时,幕后会发生什么?我认为 Sidekiq 这次不会因为“无法正确地在转储/加载往返中幸存”而无法处理它。
【问题讨论】:
-
你有什么问题?
-
@MarkMerritt 当我将复杂对象传递给以 Sidekiq 作为其后端的 ActiveJob 时,幕后实际发生了什么。
-
我不确定“复杂对象”是什么意思...看来您应该将 id 传递给您的工作
-
根据 wiki(问题上的链接),它不是字符串、整数、浮点数、布尔值、null(nil)、数组和散列。所以任何 ActiveRecord 对象、日期、日期时间等都被视为“复杂对象”
-
是的,当我们使用 Sidekiq 只传递一个 ID 时,我也这么认为。但是 ActiveJob 明确表示可以传递一个实际的对象,而不仅仅是它的 id。结合 ActiveJob 和 Sidekiq 时,我的问题就出现了
标签: ruby-on-rails ruby sidekiq rails-activejob