Sha256: d0db57053f818aeb4ed09bbada802e207096b87e07b1c36437d91a0fd650c714

Contents?: true

Size: 1.1 KB

Versions: 3

Compression:

Stored size: 1.1 KB

Contents

# This class takes care of the subscribing side of the messaging system.
module DispatchRider
  class Subscriber
    attr_reader :queue_service_registrar, :dispatcher, :demultiplexer

    def initialize
      @queue_service_registrar = DispatchRider::Registrars::QueueService.new
      @dispatcher = DispatchRider::Dispatcher.new
    end

    def register_queue(name, options = {})
      queue_service_registrar.register(name, options)
      self
    end

    def register_handler(name)
      dispatcher.register(name)
      self
    end

    def register_handlers(*names)
      names.each {|name| register_handler(name)}
      self
    end

    def on_dispatch_error(&block)
      dispatcher.on_error &block
    end

    def setup_demultiplexer(queue_name)
      queue = queue_service_registrar.fetch(queue_name)
      @demultiplexer ||= DispatchRider::Demultiplexer.new(queue, dispatcher)
      self
    end

    def process
      interuption_count = 0
      Signal.trap("INT") do
        interuption_count += 1
        interuption_count < 2 ? demultiplexer.stop : exit(0)
      end
      demultiplexer.start
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dispatch-rider-0.0.7 lib/dispatch-rider/subscriber.rb
dispatch-rider-0.0.5 lib/dispatch-rider/subscriber.rb
dispatch-rider-0.0.4 lib/dispatch-rider/subscriber.rb