Sha256: 24c3d025b848cd35de6b5bf7c993fdc543b828b74a2b5200deb9bec4127fdb83

Contents?: true

Size: 1017 Bytes

Versions: 1

Compression:

Stored size: 1017 Bytes

Contents

module BunnyRpc
  class Server
    attr_accessor :reply_correlation_id, :reply_to, :queue_name

    def initialize(options={})
      @options = options
    end

    def publish(payload)
      exchange.publish(
        payload,
        routing_key: @reply_to,
        correlation_id: @reply_correlation_id
      )
    end

    def subscribe(queue_name)
      raise 'no queue name' if queue_name.nil?

      @queue_name = queue_name
      queue.subscribe(block: true) do |_, properties, payload|
        @reply_to = properties.reply_to
        @reply_correlation_id = properties.correlation_id

        publish(yield payload)
      end
    end

    def connect
      return @connect if defined?(@connect)
      @connect = Bunny.new(@options)
      @connect.start
      @connect
    end

    def channel
      @channel ||= connect.create_channel
    end

    def exchange
      @exchange ||= channel.default_exchange
    end

    def queue
      @queue ||= channel.queue(@queue_name, exclusive: true)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bunny_rpc-0.1.3 lib/bunny_rpc/server.rb