在我们的应用程序中,我们公开了一个回调路由以供外部服务命中。当我们收到回调时,我们使用客户端/浏览器端的 Eventsource 和服务器端的 cramp 向客户端订阅者发布更新。然而,有时我们会被来自这个外部服务的回调请求轰炸,这导致我们向客户端发布大量更新。Rails 端有没有一种方法,类似于 javascript debounce 函数,可以在收到的回调之间等待一段设定的时间来发布消息?
我们已经在使用 sidekiq + 线程,因此欢迎使用这些工具提出建议。
在我们的应用程序中,我们公开了一个回调路由以供外部服务命中。当我们收到回调时,我们使用客户端/浏览器端的 Eventsource 和服务器端的 cramp 向客户端订阅者发布更新。然而,有时我们会被来自这个外部服务的回调请求轰炸,这导致我们向客户端发布大量更新。Rails 端有没有一种方法,类似于 javascript debounce 函数,可以在收到的回调之间等待一段设定的时间来发布消息?
我们已经在使用 sidekiq + 线程,因此欢迎使用这些工具提出建议。
有一个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