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