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.



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

def initialize(bunny_config)
  @bunny_config = OpenStruct.new(bunny_config) # rubocop:todo Style/OpenStructUse
end

Instance Attribute Details

#bunny_configObject (readonly)

Returns the value of attribute bunny_config.



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

def bunny_config
  @bunny_config
end

#channelObject (readonly)

Returns the value of attribute channel.



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

def channel
  @channel
end

#connectionObject

Returns the value of attribute connection.



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

def connection
  @connection
end

#exchangeObject (readonly)

Returns the value of attribute exchange.



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

def exchange
  @exchange
end

#queueObject (readonly)

Returns the value of attribute queue.



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

def queue
  @queue
end

Instance Method Details

#bind_queueObject



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

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

#connectObject



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

def connect
  connect!
end

#connect!Object



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

def connect!
  start_connection
  open_channel
  instantiate_exchange
  declare_queue
  bind_queue
end

#connected?Boolean

Returns:

  • (Boolean)


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

def connected?
  @connection&.connected?
end

#create_connectionObject



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

def create_connection
  connected? || connect
end

#declare_queueObject



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

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

#instantiate_exchangeObject



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

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

#open_channelObject



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

def open_channel
  @channel = @connection.create_channel
end

#publish(message) ⇒ Object



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

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

#start_connectionObject



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

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