Продолжайте публиковать данные через издателя RabbitMQ (ruby bunny) - PullRequest
1 голос
/ 13 февраля 2020

У меня есть RabbitMQ с кроликом, работающим с помощью consumer.rb и publisher.rb. Если я запускаю

    ruby consumer.rb

, а затем

    publisher.rb 

, я получаю публикуемые данные (данные, поступающие из другого класса). Данные печатаются вот так на ruby consumer.rb, когда я запускаю publisher.rb:

Test New Data
1142.5186392493372

Мне нужно, чтобы эти два сценария запускались постоянно, поэтому издатель продолжает проталкивать данные (@ devise.value), и я вижу, вышеуказанный вывод непрерывно. Я попытался создать новый файл сервера с помощью Daemon и запустить ruby server.rb start. Но это продолжает запускать publisher.rb, но не постоянно, поэтому он публикует данные. Кроме того, как я могу заставить это приложение RabbitMQ ruby опубликовать sh данные в другом веб-приложении rails?

publisher.rb

require 'bunny' require 'daemons'

класс BunnyPublisher

def connection
    conn = Bunny.new
    conn.start
end 

def channel
    connection.create_channel
end

def q
    channel.queue("que")
end

def exchange
    channel.default_exchange
end

def publish(data, q)
    exchange.publish(data, routing_key: "que") 

    sleep(5)

    connection.close
end

server.rb

require 'daemons'

Daemons.run('publisher.rb')

Спасибо

1 Ответ

0 голосов
/ 25 февраля 2020

Демонам не нужно. Я изменил код класса Publisher в исходном вопросе на текущий. И я добавил некоторое время l oop, как уже упоминалось.

ruby файл, работающий с издателем:

i = 0
while i < 1
data = { 
            weight: @devise.value, 
            pressure: @devise.value
        }
    m = data.to_json;
    @pub.publish(m, routing_key: @q) // @pub: Publisher class
end

в классе издателя:

def publish(data, q)
    exchange.publish(data, routing_key: "queue_name") //exchange another method

    sleep(5) //Publish every 5 seconds

    connection.close
end
...