Class: Distribot::BunnyConnector

Inherits:
Connector show all
Defined in:
lib/distribot/connector.rb

Instance Attribute Summary collapse

Attributes inherited from Connector

#amqp_url, #bunny

Instance Method Summary collapse

Methods inherited from Connector

#logger, #queues

Constructor Details

#initialize(*args) ⇒ BunnyConnector

Returns a new instance of BunnyConnector.



93
94
95
96
# File 'lib/distribot/connector.rb', line 93

def initialize(*args)
  super(*args)
  self.subscribers = []
end

Instance Attribute Details

#channelObject

Returns the value of attribute channel.



92
93
94
# File 'lib/distribot/connector.rb', line 92

def channel
  @channel
end

#subscribersObject

Returns the value of attribute subscribers.



92
93
94
# File 'lib/distribot/connector.rb', line 92

def subscribers
  @subscribers
end

Instance Method Details

#broadcast(topic, message) ⇒ Object



134
135
136
137
138
# File 'lib/distribot/connector.rb', line 134

def broadcast(topic, message)
  exchange = channel.fanout(topic)
  logger.debug "broadcast(#{topic} -> #{message})"
  exchange.publish(message.to_json, routing_key: topic)
end

#publish(topic, message) ⇒ Object



126
127
128
129
130
131
132
# File 'lib/distribot/connector.rb', line 126

def publish(topic, message)
  queue = stubbornly :get_queue do
    channel.queue(topic, auto_delete: false, durable: true)
  end
  logger.debug "publish(#{topic} -> #{message})"
  channel.default_exchange.publish message.to_json, routing_key: queue.name
end

#queue_exists?(topic) ⇒ Boolean

Returns:

  • (Boolean)


102
103
104
# File 'lib/distribot/connector.rb', line 102

def queue_exists?(topic)
  bunny.queue_exists?(topic)
end

#subscribe(topic, options = {}, &block) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/distribot/connector.rb', line 106

def subscribe(topic, options = {}, &block)
  if options[:solo]
    options.delete :solo
    setup
  end
  subscriber = Subscription.new(bunny)
  subscribers << subscriber.start(topic, options) do |message|
    logger.debug "received(#{topic} -> #{message})"
    block.call(message)
  end
end

#subscribe_multi(topic, options = {}, &block) ⇒ Object



118
119
120
121
122
123
124
# File 'lib/distribot/connector.rb', line 118

def subscribe_multi(topic, options = {}, &block)
  subscriber = MultiSubscription.new(bunny)
  subscribers << subscriber.start(topic, options) do |message|
    logger.debug "received-multi(#{topic} -> #{message})"
    block.call(message)
  end
end