gpt4 book ai didi

ruby-on-rails - 运动鞋未在 heroku 上接收消息 - RabbitMQ Bigwig

转载 作者:行者123 更新时间:2023-12-01 18:25:57 26 4
gpt4 key购买 nike

我正在尝试在heroku上运行消息队列。为此,我使用 RabbitMQ Bigwig 插件。

我正在使用兔子 gem 发布消息并尝试使用运动鞋 gem 接收消息。整个设置在本地计算机上运行顺利。

我采取以下步骤来设置队列

我在服务器上运行这个 rake 来设置队列:

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

我可以在具有提到的绑定(bind)的rabbitmq管理插件中看到这个队列。

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

我正在调用 TestPublisher.publish() 来发布消息。

我有这样的运动鞋 worker :

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

我的Proc文件

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work
sneaker: WORKERS=TestsWorker bundle exec rake sneakers:run

我的 Rakefile

require File.expand_path('../config/application', __FILE__)
require 'rake/dsl_definition'
require 'rake'
require 'sneakers/tasks'

Test::Application.load_tasks

我的运动鞋配置

require 'sneakers'
Sneakers.configure amqp: ENV['RABBITMQ_BIGWIG_RX_URL'],
log: "log/sneakers.log",
threads: 1,
workers: 1

puts "configuring sneaker"

我确信该消息已发布。我能够收到有关rabbitmq管理插件的消息。但运动鞋不起作用。 sportsers.log 中没有任何可以提供帮助的内容。

heroku 上的sneakers.log:

# Logfile created on 2016-04-05 14:40:59 +0530 by logger.rb/41212

最佳答案

抱歉这么晚回复。我能够在 Heroku 上完成这个工作。当我经过几个小时的调试后遇到这个错误时,我无法修复它。所以我重写了上面所有的代码,并且我没有检查我之前的代码有什么问题。

此代码和正确代码的唯一问题是队列绑定(bind)。

我在同一个交换机上有两个队列。 pcc.commands 带有路由键 pcc_cmdtest.commands 带有路由键 test_cmd

我正在使用 test_cmd 但按照 TestPublisher 中的以下行

x.publish(Test, :persistent => true, :routing_key => 'pcc_cmd')

我正在发布到不同的队列(pcc.commands)。因此我无法在 test.commands 队列上收到消息。

TestWorker

from_queue "test.commands", env: nil

这表明仅从 test.commands 队列中获取消息。

关于sneakers.log文件: 上述设置无法在 sneakers.log 文件中提供日志。是的,此设置适用于您的本地开发计算机,但不适用于 heroku。现在,为了调试此类问题,我从配置中省略了 log 属性。像这样:

require 'sneakers'
Sneakers.configure amqp: ENV['RABBITMQ_BIGWIG_RX_URL'],
# log: "log/sneakers.log",
threads: 1,
workers: 1

这样你就可以在heroku日志中获取sneaker日志(甚至是心跳日志),可以通过运行命令heroku logs -a app_name --tail来查看。

关于ruby-on-rails - 运动鞋未在 heroku 上接收消息 - RabbitMQ Bigwig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com