Sha256: 5b72ada2d1c07dce6b9f1dd9718f998137f4bf166f2d258158820a68702b4b3a
Contents?: true
Size: 1.86 KB
Versions: 1
Compression:
Stored size: 1.86 KB
Contents
# frozen_string_literal: true require "delegate" require_relative "limiter/distributed_rate_queue" require_relative "json_rpc_client" require_relative "throttled_json_rpc_client/version" module ThrottledJsonRpcClient class Client < SimpleDelegator DEFAULT_MAX_RETRIES = 3 DEFAULT_BASE_DELAY = 1 # Base delay in seconds # limit: #{rate} requests / #{interval} seconds def initialize( endpoint, timeout: JsonRpcClient::DEFAULT_TIMEOUT, max_batch_size: JsonRpcClient::DEFAULT_MAX_BATCH_SIZE, headers: {}, # retry params max_retries: DEFAULT_MAX_RETRIES, base_delay: DEFAULT_BASE_DELAY, # limit params rate: 5, interval: 1, # in seconds redis_urls: ["redis://localhost:6379/2"] ) @max_retries = max_retries @base_delay = base_delay @queue = DistributedRateQueue.new( redis_urls: redis_urls, key: "key:#{endpoint}", rate: rate, interval: interval ) super( JsonRpcClient.new( endpoint, timeout: timeout, max_batch_size: max_batch_size, headers: headers ) ) end def call(method, params = nil) retries = 0 begin @queue.shift do super(method, params) end rescue JsonRpcClient::RpcError => e retries += 1 if retries <= @max_retries delay = @base_delay * (2**(retries - 1)) sleep(delay) retry end raise e end end def batch_call(calls) retries = 0 begin @queue.shift do super(calls) end rescue JsonRpcClient::RpcError => e retries += 1 if retries <= @max_retries delay = @base_delay * (2**(retries - 1)) sleep(delay) retry end raise e end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
throttled_json_rpc_client-0.2.0 | lib/throttled_json_rpc_client.rb |