Ich versuche Message Queues auf Heroku auszuführen. Dazu verwende ich RabbitMQ Bigwig Plugin.Sneaker empfängt keine Nachrichten auf Heroku - RabbitMQ Bigwig
Ich veröffentliche Nachrichten mit Hase Edelstein und versuche, Nachrichten mit Turnschuhen Edelstein zu erhalten. Das ganze Setup funktioniert reibungslos auf dem lokalen Rechner.
Ich nehme folgende Schritte zum Einrichten Warteschlange
ich diesen Rake auf Server einrichten Warteschlange auszuführen:
namespace :rabbitmq do
desc 'Setup routing'
task :setup_test_commands_queue do
require 'bunny'
conn = Bunny.new(ENV['SYNC_AMQP'], read_timeout: 10, heartbeat: 10)
conn.start
ch = conn.create_channel
# get or create exchange
x = ch.direct('testsync.pcc', :durable => true)
# get or create queue (note the durable setting)
queue = ch.queue('test.commands', :durable => true, :ack => true, :routing_key => 'test_cmd')
# bind queue to exchange
queue.bind(x, :routing_key => 'test_cmd')
conn.close
end
end
Ich bin in der Lage diese Warteschlange in rabbitmq Management-Plugin mit erwähnten Bindung zu sehen.
class TestPublisher
def self.publish(test)
x = channel.direct("testsync.pcc", :durable => true)
puts "publishing this = #{Test}"
x.publish(Test, :persistent => true, :routing_key => 'pcc_cmd')
end
def self.channel
@channel ||= connection.create_channel
end
def self.connection
@conn = Bunny.new(ENV['RABBITMQ_BIGWIG_TX_URL'], read_timeout: 10, heartbeat: 10) # getting configuration from rabbitmq.yml
@conn.start
end
end
Ich rufe TestPublisher.publish() Nachricht zu veröffentlichen.
Ich habe Sneaker Arbeiter wie folgt aus:
require 'test_sync'
class TestsWorker
include Sneakers::Worker
from_queue "test.commands", env: nil
def work(raw_event)
puts "^"*100
puts raw_event
# o = CaseNote.create!(content: raw_event, creator_id: 1)
# puts "#########{o}"
test = Oj.load raw_event
test.execute
# event_params = JSON.parse(raw_event)
# SomeWiseService.build.call(event_params)
ack!
end
end
Mein procfile
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work
sneaker: WORKERS=TestsWorker bundle exec rake sneakers:run
Mein Rakefile
require File.expand_path('../config/application', __FILE__)
require 'rake/dsl_definition'
require 'rake'
require 'sneakers/tasks'
Test::Application.load_tasks
Meine sneaker Konfiguration
require 'sneakers'
Sneakers.configure amqp: ENV['RABBITMQ_BIGWIG_RX_URL'],
log: "log/sneakers.log",
threads: 1,
workers: 1
puts "configuring sneaker"
Ich bin sicher, dass die Nachricht veröffentlicht wird. Ich bin in der Lage, eine Nachricht auf Rabbitmq-Management-Plugin zu bekommen. Aber Sneaker funktioniert nicht. Es gibt nichts in sneakers.log, das helfen kann.
sneakers.log auf Heroku:
# Logfile created on 2016-04-05 14:40:59 +0530 by logger.rb/41212
Konnten Sie das beheben? Eine dumme Sache: hast du einen Dyno Turnschuh-Prozess zugewiesen? Anders als das, können Sie 'puts 'konfigurieren Sneaker" 'vor der eigentlichen Konfigurationszeile setzen und sehen, ob es in den Protokollen angezeigt wird? Auch sollte nicht Ihr Login auf Heroku Informationen über Dyno enthalten, aus denen es stammt? – draganstankovic
Dies könnte einige arme Seele in der Zukunft helfen. Ich habe etwas Ähnliches getan, aber auf 'cloud66' musste ich mein Procfile ändern: von' sneaker: WORKERS = TestsWorker bundle exec rake sneakers: run' zu 'sneaker: bundle exec rake sneakers: run WORKERS = TestsWorker' NOTE - the WORKERS env muss am Ende kommen – house9