Class: BasicJRPC::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/basicjrpc/server.rb

Instance Method Summary collapse

Constructor Details

#initialize(queue, injected_class, host = "redis") ⇒ Server

Returns a new instance of Server.



4
5
6
7
8
9
# File 'lib/basicjrpc/server.rb', line 4

def initialize queue, injected_class, host="redis"
  @injected_class = injected_class
  @queue = queue
  #@nsq_consumer = Nsq::Consumer.new(nsqlookupd: 'dockerlb:4161', topic: @queue, channel: 'server')
  @host = host
end

Instance Method Details

#listenObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/basicjrpc/server.rb', line 11

def listen
  puts "Listening..."
  @redis = Redis.new(host: @host)
  
  while true
    begin
      redis_response = @redis.brpop(@queue)
    rescue
      @redis = Redis.new(host: @host)
      puts "REDIS FAILED! RETRYING"
      retry
    end
    next if redis_response.nil?
    message = redis_response[1]
    
    payload = Oj.load(message, :symbol_keys => true)

    response = @injected_class.send(payload.method_name, *payload.method_arguments)

    @redis.rpush(payload.message_id, Oj.dump(response))
  end
rescue Exception => e
  raise e
end

#terminateObject



36
37
38
# File 'lib/basicjrpc/server.rb', line 36

def terminate
  #@nsq_consumer.terminate
end