6

在我们的应用程序中,我们公开了一个回调路由以供外部服务命中。当我们收到回调时,我们使用客户端/浏览器端的 Eventsource 和服务器端的 cramp 向客户端订阅者发布更新。然而,有时我们会被来自这个外部服务的回调请求轰炸,这导致我们向客户端发布大量更新。Rails 端有没有一种方法,类似于 javascript debounce 函数,可以在收到的回调之间等待一段设定的时间来发布消息?

我们已经在使用 sidekiq + 线程,因此欢迎使用这些工具提出建议。

4

1 回答 1

6

有一个Sidekiq-debounce gem 可用。

另一种方法(没有这样的 gem)是Rails.cache每 x 次只使用一次触发您的执行

delay = 1.minute
Rails.cache.fetch('unique-identifier-of-the-job', expires_in: delay) do
 YourActiveJobHere.set(wait: delay).perform_later('your-action')
end
于 2016-10-10T12:21:01.140 回答