Class: Messages::Broker

Inherits:
Object
  • Object
show all
Defined in:
app/messages/messages/broker.rb

Overview

This class should control connection, exchange, queues and publishing to the broker

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bunny_config) ⇒ Broker

Returns a new instance of Broker.



11
12
13
# File 'app/messages/messages/broker.rb', line 11

def initialize(bunny_config)
  @bunny_config = SuperStruct.new(bunny_config)
end

Instance Attribute Details

#bunny_configObject (readonly)

Returns the value of attribute bunny_config.



9
10
11
# File 'app/messages/messages/broker.rb', line 9

def bunny_config
  @bunny_config
end

#channelObject (readonly)

Returns the value of attribute channel.



9
10
11
# File 'app/messages/messages/broker.rb', line 9

def channel
  @channel
end

#connectionObject

Returns the value of attribute connection.



8
9
10
# File 'app/messages/messages/broker.rb', line 8

def connection
  @connection
end

#exchangeObject (readonly)

Returns the value of attribute exchange.



9
10
11
# File 'app/messages/messages/broker.rb', line 9

def exchange
  @exchange
end

#queueObject (readonly)

Returns the value of attribute queue.



9
10
11
# File 'app/messages/messages/broker.rb', line 9

def queue
  @queue
end

Instance Method Details

#bind_queueObject



56
57
58
# File 'app/messages/messages/broker.rb', line 56

def bind_queue
  @queue.bind(@exchange, routing_key: bunny_config.routing_key)
end

#connectObject



23
24
25
# File 'app/messages/messages/broker.rb', line 23

def connect
  connect!
end

#connect!Object



27
28
29
30
31
32
33
# File 'app/messages/messages/broker.rb', line 27

def connect!
  start_connection
  open_channel
  instantiate_exchange
  declare_queue
  bind_queue
end

#connected?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'app/messages/messages/broker.rb', line 19

def connected?
  @connection&.connected?
end

#create_connectionObject



15
16
17
# File 'app/messages/messages/broker.rb', line 15

def create_connection
  connected? || connect
end

#declare_queueObject



52
53
54
# File 'app/messages/messages/broker.rb', line 52

def declare_queue
  @queue = @channel.queue(bunny_config.queue_name, durable: true)
end

#instantiate_exchangeObject



48
49
50
# File 'app/messages/messages/broker.rb', line 48

def instantiate_exchange
  @exchange = @channel.topic(bunny_config.exchange, passive: true)
end

#open_channelObject



44
45
46
# File 'app/messages/messages/broker.rb', line 44

def open_channel
  @channel = @connection.create_channel
end

#publish(message) ⇒ Object



60
61
62
# File 'app/messages/messages/broker.rb', line 60

def publish(message)
  @exchange&.publish(message.payload, routing_key: bunny_config['routing_key'])
end

#start_connectionObject



35
36
37
38
39
40
41
42
# File 'app/messages/messages/broker.rb', line 35

def start_connection
  @connection = Bunny.new host: bunny_config.broker_host,
                          port: bunny_config.broker_port,
                          username: bunny_config.broker_username,
                          password: bunny_config.broker_password,
                          vhost: bunny_config.vhost
  @connection.start
end