class RemoteService::Call

Attributes

action[R]
params[R]
queue[R]
timeout[R]

Public Class Methods

new(queue, action, params, timeout:) click to toggle source
# File lib/remote_service/call.rb, line 5
def initialize(queue, action, params, timeout:)
  @queue = queue
  @action = action
  @params = params
  @timeout = (timeout || 10) / 1000.0
end

Public Instance Methods

run(&block) click to toggle source
# File lib/remote_service/call.rb, line 12
def run(&block)
  return call_service_synchronously if !block_given?
  call_service(&block)
end

Private Instance Methods

call_service() { |response, response| ... } click to toggle source
# File lib/remote_service/call.rb, line 19
def call_service
  Queue.instance.request(queue, {action: action, params: params}) do |response|
    yield(response['result'], response['error'])
  end
end
call_service_synchronously() click to toggle source
# File lib/remote_service/call.rb, line 25
def call_service_synchronously
  lock = Util::Lock.new(timeout)
  call_service do |response, error|
    lock.unlock(response, error)
  end
  response, error = lock.wait
  raise remote_error(error) if error
  response
end
remote_error(error) click to toggle source
# File lib/remote_service/call.rb, line 35
def remote_error(error)
  RemoteService.logger.error("RPC_ERROR - SERVICE:[#{queue}] ACTION:[#{action}] ERROR:#{error}")
  Errors::RemoteCallError.new(error['name'], error['message'], error['backtrace'])
end