Ruby Bunny - потребляет из нескольких очередей - PullRequest
0 голосов
/ 24 августа 2018

Я только начал использовать Ruby и пишу кусок, чтобы использовать некоторые сообщения из очереди RabbitMQ. Я использую Банни для этого.

Итак, я создал свои очереди и связал их для обмена.

Однако теперь я не уверен, как я справляюсь с подпиской на них обоих и позволяю приложению ruby ​​продолжать работать (хочу, чтобы сообщения продолжали поступать, т.е. не блокировались или, по крайней мере, не в течение длительного времени), пока я фактически не завершил его с CTRL + C.

Я пытался использовать :block => true, однако, поскольку у меня есть 2 разные очереди, на которые я подписываюсь, использование этого означает, что оно потребляет только одну.

Так вот, как я потребляю сообщения:

def consumer

    begin
      puts ' [*] Waiting for messages. To exit press CTRL+C'

      @oneQueue.subscribe(:manual_ack => true) do |delivery_info, properties, payload|
        puts('Got One Queue')
        puts "Received #{payload}, message properties are #{properties.inspect}"
      end

      @twoQueue.subscribe(:manual_ack => true) do |delivery_info, properties, payload|
        puts('Got Two Queue')
        puts "Received #{payload}, message properties are #{properties.inspect}"
      end

    rescue Interrupt => _
      #TODO - close connections here

      exit(0)
    end

end

Любая помощь будет оценена.

Спасибо!

1 Ответ

0 голосов
/ 24 августа 2018

Вы не можете использовать block: true, когда у вас есть две подписки, поскольку блокируется только первая;она никогда не попадет во вторую подписку.

Одна вещь, которую вы можете сделать, это настроить обе подписки без блокировки (которая автоматически создаст два потока для обработки сообщений), а затем заблокировать вашуосновной поток с циклом ожидания (добавьте перед вашим rescue):

loop { sleep 5 }
...