2

首先,这在我的本地机器上运行良好。

我有一个发布者应用程序(Rails 3),它正在向 heroku 中的cloudamq(插件)发布消息,我们在 cloudamq 中获取消息

在此处输入图像描述

和一个消费者应用程序(Rails 5),它也作为一个单独的应用程序在 heroku 上运行,我把这个消费者放在一个 rake 任务中,但这里的问题是只有当我们重新启动服务器时才从队列中获取消息,这意味着这个 rake 任务当我们重新启动时会运行,但在 rabbitMQ 中它显示总是在运行

在此处输入图像描述

那么一旦我们推送到heroku,我们如何才能让消费者持续收听呢?

此外,一旦我们从队列中获取消息,我必须调用 sidekiq 工作人员,这不会发生吗?使用“redis to go”插件

消费应用

我在这个消费者应用程序中使用过的 Gem

gem 'redis', '~> 3.0'

gem 'sidekiq'

gem 'bunny'

这是从队列中获取消息作为 rake 任务的消费者部分。

 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

档案

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

0 回答 0