如何使用Ruby on Rails连续轮询速率受限的外部API?

问题描述 投票:0回答:1

我想查询速率受限的外部API并将信息保存到数据库。我希望尽可能接近极限,以便信息是最新的。我最初的想法是使用sidekiq并创建一个循环中的作业,该循环检查在过去1秒内调用外部API的次数。这不行。我无法在网上找到任何例子。大多数结果都是为了在Ruby on Rails中创建API。

#config/initializers/data_poller.rb
require "redis"
redis = Redis.new
external_api = ExternalAPI::TestAPI1.new()
APIWorker.perform_async(external_api)


# app/workers/api_worker.rb
class APIWorker
  include Sidekiq::Worker
  def perform(external_api)
    while true
      if can_call_external_api
        external_api.get_data
      end
    end
  end
end
ruby-on-rails ruby api external rate-limiting
1个回答
0
投票

由于您使用的是redis,因此一种解决方案是创建缓存变量,因为它会在一秒钟后到期。

在API调用之前,检查变量是否存在。如果是的话,什么也不做。如果没有,请在一秒钟到期时再次创建并执行调用(或首先执行调用,然后填充变量)

© www.soinside.com 2019 - 2024. All rights reserved.