class MessageDriver::Broker

Constants

DEFAULT_BROKER_NAME

Attributes

adapter[R]
configuration[R]
consumers[R]

@private

destinations[R]

@private

name[R]

Public Class Methods

broker(name = DEFAULT_BROKER_NAME) click to toggle source

@overload broker @overload broker(name) @param name [Symbol] the name of the broker you wish to define @return [Broker] the specified broker @raise [BrokerNotConfigured] if a broker by that name has not yet been configured

# File lib/message_driver/broker.rb, line 31
def broker(name = DEFAULT_BROKER_NAME)
  result = brokers[name]
  if result.nil?
    raise BrokerNotConfigured,
          "There is no broker named #{name} configured. The configured brokers are #{brokers.keys}"
  end
  result
end
client(name) click to toggle source

@private

# File lib/message_driver/broker.rb, line 51
def client(name)
  unless (result = clients[name])
    result = clients[name] = Client.for_broker(name)
  end
  result
end
configure(name = DEFAULT_BROKER_NAME, options) click to toggle source

@overload configure(options) @overload configure(name, options) @param name [Symbol] when configuring multiple brokers, this symbol will differentiate between brokers @param options [Hash] options to be passed to the adapter class

# File lib/message_driver/broker.rb, line 19
def configure(name = DEFAULT_BROKER_NAME, options)
  if brokers.keys.include? name
    raise BrokerAlreadyConfigured, "there is already a broker named #{name} configured"
  end
  brokers[name] = new(name, options)
end
define(name = DEFAULT_BROKER_NAME) { |broker(name)| ... } click to toggle source

Yields the specified broker so that destinations and consumers can be defined on it. @overload define @overload define(name) @param (see broker) @yield [Broker] the specified broker @raise (see broker)

# File lib/message_driver/broker.rb, line 46
def define(name = DEFAULT_BROKER_NAME)
  yield broker(name)
end
new(name = DEFAULT_BROKER_NAME, options) click to toggle source

@private

# File lib/message_driver/broker.rb, line 110
def initialize(name = DEFAULT_BROKER_NAME, options)
  @name = name
  @adapter = resolve_adapter(options[:adapter], options)
  @stopped = false
  @configuration = options
  @destinations = {}
  @consumers = {}
  logger.debug 'MessageDriver configured successfully!'
end
reset() click to toggle source

Stops and un-configures all the brokers @see stop

# File lib/message_driver/broker.rb, line 80
def reset
  each_broker do |brk|
    begin
      brk.stop
    rescue => e
      Logging.logger.warn Logging.message_with_exception("error stopping broker #{brk.name}", e)
    end
  end
  brokers.clear
  clients.clear
end
reset_after_tests() click to toggle source

Resets all the brokers for testing purposes. @see Adapter::Base#reset_after_tests

# File lib/message_driver/broker.rb, line 72
def reset_after_tests
  each_broker do |brk|
    brk.adapter.reset_after_tests
  end
end
restart_all() click to toggle source

restarts all the brokers @see restart

# File lib/message_driver/broker.rb, line 66
def restart_all
  each_broker(&:restart)
end
stop_all() click to toggle source

stops all the brokers @see stop

# File lib/message_driver/broker.rb, line 60
def stop_all
  each_broker(&:stop)
end

Private Class Methods

brokers() click to toggle source
# File lib/message_driver/broker.rb, line 94
def brokers
  @brokers ||= {}
end
clients() click to toggle source
# File lib/message_driver/broker.rb, line 98
def clients
  @clients ||= {}
end
each_broker() { |brokers| ... } click to toggle source
# File lib/message_driver/broker.rb, line 102
def each_broker
  brokers.keys.each do |k|
    yield brokers[k]
  end
end

Public Instance Methods

bunny_adapter() click to toggle source
# File lib/message_driver/adapters/bunny_adapter.rb, line 6
def bunny_adapter
  MessageDriver::Adapters::BunnyAdapter
end
client() click to toggle source

@return [MessageDriver::Client] the client module for this broker

# File lib/message_driver/broker.rb, line 121
def client
  @client ||= self.class.client(name)
end
consumer(key, &block) click to toggle source
# File lib/message_driver/broker.rb, line 156
def consumer(key, &block)
  raise MessageDriver::Error, 'you must provide a block' unless block_given?
  @consumers[key] = block
end
destination(key, dest_name, dest_options = {}, message_props = {}) click to toggle source
# File lib/message_driver/broker.rb, line 151
def destination(key, dest_name, dest_options = {}, message_props = {})
  dest = dynamic_destination(dest_name, dest_options, message_props)
  @destinations[key] = dest
end
dynamic_destination(dest_name, dest_options = {}, message_props = {}) click to toggle source
# File lib/message_driver/broker.rb, line 147
def dynamic_destination(dest_name, dest_options = {}, message_props = {})
  client.dynamic_destination(dest_name, dest_options, message_props)
end
find_consumer(consumer_name) click to toggle source
# File lib/message_driver/broker.rb, line 173
def find_consumer(consumer_name)
  consumer = @consumers[consumer_name]
  raise MessageDriver::NoSuchConsumerError, "no consumer #{consumer_name} has been configured" if consumer.nil?
  consumer
end
find_destination(destination_name) click to toggle source

Find a previously declared Destination @param destination_name [Symbol] the name of the destination @return [Destination::Base] the requested destination @raise [MessageDriver::NoSuchDestinationError] if there is no destination with that name

# File lib/message_driver/broker.rb, line 165
def find_destination(destination_name)
  destination = @destinations[destination_name]
  if destination.nil?
    raise MessageDriver::NoSuchDestinationError, "no destination #{destination_name} has been configured"
  end
  destination
end
in_memory_adapter() click to toggle source
# File lib/message_driver/adapters/in_memory_adapter.rb, line 5
def in_memory_adapter
  MessageDriver::Adapters::InMemoryAdapter
end
restart() click to toggle source

Restarts the Broker, stopping it first if needed. This results in a new

adapter instance being constructed.

@return [Adapter::Base] the newly constructed adapter

# File lib/message_driver/broker.rb, line 140
def restart
  @adapter.stop unless stopped?
  @adapter = resolve_adapter(@configuration[:adapter], @configuration)
  @stopped = false
  @adapter
end
stomp_adapter() click to toggle source
# File lib/message_driver/adapters/stomp_adapter.rb, line 6
def stomp_adapter
  MessageDriver::Adapters::StompAdapter
end
stop() click to toggle source

stops the adapter for this Broker @see Adapters::Base#stop

# File lib/message_driver/broker.rb, line 127
def stop
  @adapter.stop
  @stopped = true
end
stopped?() click to toggle source

@return [Boolean] true if the broker is currently stopped

# File lib/message_driver/broker.rb, line 133
def stopped?
  @stopped
end

Private Instance Methods

find_adapter_class(adapter_name) click to toggle source
# File lib/message_driver/broker.rb, line 196
def find_adapter_class(adapter_name)
  require "message_driver/adapters/#{adapter_name}_adapter"

  adapter_method = "#{adapter_name}_adapter"

  unless respond_to?(adapter_method)
    raise ['the adapter',
           adapter_name,
           'must provide',
           "MessageDriver::Broker##{adapter_method}",
           'that returns the adapter class'].join(' ')
  end

  send(adapter_method)
end
resolve_adapter(adapter, options) click to toggle source
# File lib/message_driver/broker.rb, line 181
def resolve_adapter(adapter, options)
  case adapter
  when nil
    raise 'you must specify an adapter'
  when Symbol, String
    resolve_adapter(find_adapter_class(adapter), options)
  when Class
    resolve_adapter(adapter.new(self, options), options)
  when MessageDriver::Adapters::Base
    adapter
  else
    raise "adapter must be a MessageDriver::Adapters::Base, but this object is a #{adapter.class}"
  end
end