rabbitmq-tutorials/ruby/rpc_server.rb
Caique Hitoshi Mitsuoka 1f9dbc5a1b Update ruby tutorial six
2018-02-19 18:01:24 -03:00

53 lines
1003 B
Ruby

#!/usr/bin/env ruby
require 'bunny'
class FibonacciServer
def initialize
@connection = Bunny.new
@connection.start
@channel = @connection.create_channel
end
def start(queue_name)
@queue = channel.queue(queue_name)
@exchange = channel.default_exchange
subscribe_to_queue
end
def stop
channel.close
connection.close
end
private
attr_reader :channel, :exchange, :queue, :connection
def subscribe_to_queue
queue.subscribe(block: true) do |_delivery_info, properties, payload|
result = fibonacci(payload.to_i)
exchange.publish(
result.to_s,
routing_key: properties.reply_to,
correlation_id: properties.correlation_id
)
end
end
def fibonacci(value)
return value if value.zero? || value == 1
fibonacci(value - 1) + fibonacci(value - 2)
end
end
begin
server = FibonacciServer.new
puts ' [x] Awaiting RPC requests'
server.start('rpc_queue')
rescue Interrupt => _
server.stop
end