def create_queue(queue_name, exchange_name, options = {})
      queue_options = options[:queue_options] || {durable: true}
      routing_keys  = options[:routing_keys] || []
      log "Isimud::BunnyClient: create_queue #{queue_name}: queue_options=#{queue_options.inspect}"
      queue = find_queue(queue_name, queue_options)
      bind_routing_keys(queue, exchange_name, routing_keys) if routing_keys.any?
      queue
    end
def create_queue(queue_name, exchange_name, options = {})
      queue_options = options[:queue_options] || {durable: true}
      routing_keys  = options[:routing_keys] || []
      log "Isimud::BunnyClient: create_queue #{queue_name}: queue_options=#{queue_options.inspect}"
      queue = find_queue(queue_name, queue_options)
      bind_routing_keys(queue, exchange_name, routing_keys) if routing_keys.any?
      queue
    end
Find or create a named queue and bind it to the specified exchange

 @param [String] queue_name name of the queue
 @param [String] exchange_name name of the AMQP exchange. Note that pre-existing exchanges must be declared as Topic
   exchanges; otherwise, an error will occur
 @param [Hash] options queue declaration options
 @option options [Boolean] :queue_options ({durable: true}) queue declaration options -- @see Bunny::Channel#queue
 @option options [Array<String>] :routing_keys ([]) routing keys to be bound to the queue. Use "*" to match any 1 word
   in a route segment. Use "#" to match 0 or more words in a segment.
 @return [Bunny::Queue] Bunny queue