class StompJob::Connection

Public Class Methods

default_connection() click to toggle source
# File lib/stomp_job/connection.rb, line 10
def self.default_connection
  @default_connection ||= refresh_default_connection
end
from(stomp_configuration={}) click to toggle source
# File lib/stomp_job/connection.rb, line 6
def self.from(stomp_configuration={})
  new(new_client( Configuration.configuration.merge(stomp_configuration) ))
end
new(connection=nil) click to toggle source
# File lib/stomp_job/connection.rb, line 43
def initialize(connection=nil)
  @connection = connection || self.class.new_client( Configuration.configuration )
end
refresh_default_connection() click to toggle source
# File lib/stomp_job/connection.rb, line 14
def self.refresh_default_connection
  @default_connection = new
end

Private Class Methods

new_client(config) click to toggle source
# File lib/stomp_job/connection.rb, line 35
def self.new_client(config)
  Stomp::Client.new(config)
rescue RuntimeError => exception # All STOMP gem errors subclass RuntimeError
  # We wrap the STOMP exception with our own to provide an extra layer of
  # indirection.
  raise ConnectionException.new(exception)
end

Public Instance Methods

publish(queue_name, *args) click to toggle source

Using a marshaller allows us to send complex messages over stomp. Using Ruby's built-in `Marshal` by default.

# File lib/stomp_job/connection.rb, line 22
def publish(queue_name, *args)
  @connection.publish(safe_queue_name(queue_name), marshaller.dump(args))
end
subscribe(worker_klass) click to toggle source
# File lib/stomp_job/connection.rb, line 26
def subscribe(worker_klass)
  @connection.subscribe( safe_queue_name(worker_klass.queue_name) ) do |msg|
    worker_klass.new.perform( *marshaller.load(msg.body) )
  end
end

Private Instance Methods

marshaller() click to toggle source
# File lib/stomp_job/connection.rb, line 53
def marshaller
  Marshal
end
safe_queue_name(queue_name) click to toggle source

The STOMP gem can break the interpreter if the queue name is invalid. This method ensures that queue_names are properly formatted.

# File lib/stomp_job/connection.rb, line 49
def safe_queue_name(queue_name)
  queue_name.match(/\Ajms\.queue/) ? queue_name : "jms.queue.#{queue_name}"
end