Проблема с настройкой на heroku с rabbitMQ (cloudamqp addon) - приложение ruby - PullRequest
0 голосов
/ 25 сентября 2018

Прежде всего, это нормально работает на моей локальной машине.

У меня есть одно приложение для издателей (Rails 3), которое публикует сообщение для cloudamq (аддон) в heroku, мы получаем сообщения в cloudamq

enter image description here

и одно потребительское приложение (Rails 5), которое также работает на heroku как отдельное приложение, я поставил этого потребителя в задачу rake, но здесь проблема в том, что он принимает сообщения только из очередикогда мы перезапускаем сервер, это означает, что эта задача rake будет запускаться при перезапуске, но в rabbitMQ он всегда показывает:

enter image description here

Итак, как мы можем сделатьпотребитель постоянно слушает, как только мы нажимаем на heroku?

Кроме того, как только мы получаем сообщение из очереди, я должен вызвать работника sidekiq, чего не происходит?использование 'redis to go' addon

APP

Gem, который я использовал в этом клиентском приложении

gem 'redis', '~> 3.0'

gem 'sidekiq'

gem 'bunny'

Это потребительская часть, чтобы получить сообщение из очередикак грабли.

 task :do_consumer => :environment do

   connection = Bunny.new(ENV['CLOUDAMQP_URL'])

   connection.start # start a communication session with the amqp server

   channel = connection.channel()

   queue = channel.queue('order-queue', durable: true)

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

   queue.subscribe(manual_ack: true, block: true) do |delivery_info, 
   properties, payload|
      puts " [x] Received #{payload}"
      puts " [x] Done"

      channel.ack(delivery_info.delivery_tag, false)
      # Call sidekiq worker to do task
      callSidekiqWorker.perform_async(payload)
   end
end

Procfile

web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq -e production
worker: bundle exec rake do_consumer
...