Class: ThrottledJsonRpcClient::Client
- Inherits:
- 
      SimpleDelegator
      
        - Object
- SimpleDelegator
- ThrottledJsonRpcClient::Client
 
- Defined in:
- lib/throttled_json_rpc_client.rb
Constant Summary collapse
- DEFAULT_MAX_RETRIES =
- 3
- DEFAULT_BASE_DELAY =
          Base delay in seconds 
- 1
Instance Method Summary collapse
- #batch_call(calls) ⇒ Object
- #call(method, params = nil) ⇒ Object
- 
  
    
      #initialize(endpoint, timeout: JsonRpcClient::DEFAULT_TIMEOUT, max_batch_size: JsonRpcClient::DEFAULT_MAX_BATCH_SIZE, headers: {}, max_retries: DEFAULT_MAX_RETRIES, base_delay: DEFAULT_BASE_DELAY, rate: 5, interval: 1, redis_urls: ["redis://localhost:6379/2"])  ⇒ Client 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    limit: #rate requests / #interval seconds. 
Constructor Details
#initialize(endpoint, timeout: JsonRpcClient::DEFAULT_TIMEOUT, max_batch_size: JsonRpcClient::DEFAULT_MAX_BATCH_SIZE, headers: {}, max_retries: DEFAULT_MAX_RETRIES, base_delay: DEFAULT_BASE_DELAY, rate: 5, interval: 1, redis_urls: ["redis://localhost:6379/2"]) ⇒ Client
limit: #rate requests / #interval seconds
| 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # File 'lib/throttled_json_rpc_client.rb', line 14 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 | 
Instance Method Details
#batch_call(calls) ⇒ Object
| 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | # File 'lib/throttled_json_rpc_client.rb', line 62 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 | 
#call(method, params = nil) ⇒ Object
| 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # File 'lib/throttled_json_rpc_client.rb', line 45 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 |