# class Puppet::Util::Queue::Stomp

Implements the Ruby Stomp client as a queue type within the Puppet::Indirector::Queue::Client registry, for use with the `:queue` indirection terminus type.

Looks to `Puppet[:queue_source]` for the sole argument to the underlying Stomp::Client constructor; consequently, for this client to work, `Puppet[:queue_source]` must use the Stomp::Client URL-like syntax for identifying the Stomp message broker: login:pass@host.port

### Attributes

stomp_client[RW]

### Public Class Methods

new() click to toggle source

    # File lib/puppet/util/queue/stomp.rb, line 16
    def initialize
      begin
        uri = URI.parse(Puppet[:queue_source])
      rescue => detail
        raise ArgumentError, "Could not create Stomp client instance - queue source #{Puppet[:queue_source]} is invalid: #{detail}"
      end
      unless uri.scheme == "stomp"
        raise ArgumentError, "Could not create Stomp client instance - queue source #{Puppet[:queue_source]} is not a Stomp URL: #{detail}"
      end

      begin
        self.stomp_client = Stomp::Client.new(uri.user, uri.password, uri.host, uri.port, true)
      rescue => detail
        raise ArgumentError, "Could not create Stomp client instance with queue source #{Puppet[:queue_source]}: got internal Stomp client error #{detail}"
      end

      # Identify the supported method for sending messages.
      @method =
        case
        when stomp_client.respond_to?(:publish)
          :publish
        when stomp_client.respond_to?(:send)
          :send
        else
          raise ArgumentError, "STOMP client does not respond to either publish or send"
        end
    end

### Public Instance Methods

publish_message(target, msg) click to toggle source

    # File lib/puppet/util/queue/stomp.rb, line 44
    def publish_message(target, msg)
      stomp_client.__send__(@method, stompify_target(target), msg, :persistent => true)
    end

stompify_target(target) click to toggle source

    # File lib/puppet/util/queue/stomp.rb, line 55
    def stompify_target(target)
      '/queue/' + target.to_s
    end

subscribe(target) { |body| ... } click to toggle source

    # File lib/puppet/util/queue/stomp.rb, line 48
    def subscribe(target)
      stomp_client.subscribe(stompify_target(target), :ack => :client) do |stomp_message|
        yield(stomp_message.body)
        stomp_client.acknowledge(stomp_message)
      end
    end