RabbitMQ с помощником

У меня есть два приложения rails, App1 и App2 (добавлен гем cloudAMQP) в heroku, App1 выдает какое-то сообщение при нажатии на кнопку

Приложение 1

class Publisher
   def publish
    # Start a communication session with RabbitMQ
    connection = Bunny.new(:host => "chimpanzee.rmq.cloudamqp.com", :vhost => "test", :user => "test", :password => "password")
    connection.start

    # open a channel
    channel = connection.create_channel

    # declare a queue
    queue  = channel.queue("test1")

    # publish a message to the default exchange which then gets routed to this queue
    queue.publish("Hello, everybody!")

   end
end

поэтому в App2 я должен потреблять все сообщения без нажатия кнопки и помещать их в sidekiq для обработки данных, но я застрял на том, как я могу автоматически читать из этой очереди, я знаю код, как читать значения из очереди, люди говорят, что кроссовки - это жемчужина, но я немного запутался с sidekiq и кроссовками, есть идеи, как мы можем сделать это в героку?


person Developer    schedule 07.09.2018    source источник
comment
спасибо @Sergio Tulentsev, у меня есть вопрос, могу ли я использовать sidekiq вместо кроссовок, если они используются для фоновых работ? я не хочу использовать больше драгоценных камней, максимум 2   -  person Developer    schedule 08.09.2018


Ответы (1)


Чтобы читать сообщения, которые вы публикуете из App1 в App2, в App2 вам понадобятся кроссовки (https://github.com/jondot/sneakers)

ваш читатель сделал бы что-то вроде:

class Reader
  include Sneakers::Worker
  from_queue 'test1'

  def work(message)
    # your code
    ack!
  end
end

и вам нужно настроить свою среду, вы можете взглянуть на https://github.com/jondot/sneakers/wiki/Configuration

person sad parrot    schedule 07.09.2018
comment
спасибо @sad parrot, это будет автоматически прослушиваться издателем? у меня есть вопрос, могу ли я использовать sidekiq вместо кроссовок, если они используются для фоновой работы? я не хочу использовать больше драгоценных камней, максимум 2 - person Developer; 08.09.2018
comment
да, он будет автоматически прослушиваться от издателя, и вы можете запустить его в фоновом режиме (с рельсами и с самостоятельным работником). Если вы не хотите использовать кроссовки, вы можете написать свой собственный потребитель с помощью queue.subscribe (см. документы здесь). - person sad parrot; 08.09.2018
comment
Я бы не рекомендовал sidekiq, потому что он не был предназначен для этого (но это возможно, взгляните на этот поток). Если вы беспокоитесь о том, чтобы не использовать больше драгоценных камней, я бы последовал подходу написания собственного потребителя с помощью queue.subscribe. - person sad parrot; 08.09.2018
comment
если я хочу использовать queue.subscribe, как я могу написать, чтобы автоматически прослушивать очередь с кроликом, или я должен использовать какое-то задание cron, чтобы проверять каждые 5 секунд, есть ли в этой очереди какое-либо сообщение или нет? кто-нибудь имеет представление об этом, я застрял на этом. - person Developer; 11.09.2018
comment
@django Следуйте этому руководству по rabbitmq здесь part1 и part2. Вы собираетесь написать только приемную часть учебника с Банни, как это описано в нем. После этого вы оставите свой приемник включенным, он должен оставаться в рабочем состоянии, чтобы продолжать получать сообщения, которые отправляет ваше приложение 1 (например: если вы используете героку, оставьте его работающим в динамометре). - person sad parrot; 12.09.2018