Module: Cottontail::Consumer::ClassMethods

Defined in:
lib/cottontail/consumer.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#consume(route = {}, options = {}, &block) ⇒ Object

Method for consuming messages.

When ‘:any` is provided as parameter, all messages will be routed to this block. This is the default.

Examples:

By routing key

consume route: 'message.sent' do |delivery_info, properties, payload|
  # stuff to do
end

# you can also use a shortcut for this
consume "message.sent" do |delivery_info, properties, payload|
  # stuff to do
end

By multiple routing keys

consume route: ['message.sent', 'message.read'] do |delivery_info, properties, payload|
  # stuff to do
end

# you can also use a shortcut for this
consume ["message.sent", "message.read"] do |delivery_info, properties, payload|
  # stuff to do
end

Scoped to a specific queue

consume route: 'message.sent', queue: 'chats' do |delivery_info, properties, payload|
  # do stuff
end

By message type (not yet implemented)

consume type: 'ChatMessage' do |delivery_info, properties, payload|
  # stuff to do
end

By multiple message types (not yet implemented)

consume type: ['ChatMessage', 'PushMessage'] do |delivery_info, properties, payload|
  # stuff to do
end


145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/cottontail/consumer.rb', line 145

def consume(route = {}, options = {}, &block)
  options =
    if route.is_a?(Hash)
      route
    else
      { route: route }
    end.merge(options)

  get(:consumables).push(
    Cottontail::Consumer::Entity.new(options, &block)
  )
end

#session(options = nil, &block) ⇒ Object

Set the Bunny session.

You are required to setup a standard Bunny session as you would when using Bunny directly. This enables you to be configurable to the maximum extend.

Examples:

Simple Bunny::Session

session ENV['RABBITMQ_URL'] do |session, worker|
  channel = session.create_channel

  queue = channel.queue('MyAwesomeQueue', durable: true)
  worker.subscribe(queue, exclusive: true, ack: false)
end

Subscribe to multiple queues

session ENV['RABBITMQ_URL'] do |session, worker|
  channel = session.create_channel

  queue_a = channel.queue('queue_a', durable: true)
  worker.subscribe(queue_a, exclusive: true, ack: false)

  queue_b = channel.queue('queue_b', durable: true)
  worker.subscribe(queue_b, exclusive: true, ack: false)
end


102
103
104
# File 'lib/cottontail/consumer.rb', line 102

def session(options = nil, &block)
  set :session, [options, block]
end

#start(blocking = true) ⇒ Object

Conveniently start the consumer

Examples:

Since setup

class Worker
  include Cottontail::Consumer

  # ... configuration ...
end

Worker.start


168
169
170
# File 'lib/cottontail/consumer.rb', line 168

def start(blocking = true)
  new.start(blocking)
end