2014-04-23 53 views
0

我想要得到一個基本的交流=>隊列繼續rabbitmq。rabbitmq交換永遠不會發布到隊列綁定

  • 我有我的本地主機上運行的RabbitMQ
  • 的RabbitMQ的網絡信息中心提供的http://localhost:15672/
  • 我有一個消息源(logstash)寫入叫做交換「yomtvraps」
  • 我稱之爲隊列「yomtvraps」
  • 我有一個從交流「yomtvraps」隊列「yomtvraps」,顯示了交流和隊列兩者的詳細信息頁面上結合

我開始了我的消息,發射

  • 顯示所有交流的網頁顯示傳入的消息在80/s的
  • 交換頁面的速度顯示與輸入消息的圖形http://localhost:15672/#/exchanges/%2F/yomtvraps

...但在 「消息速率擊穿」 有0的消息輸出過程( 「...沒有公佈...」)

接收隊列中沒有

  • 我從來沒有聽接收端收到任何消息
  • 隊列頁面顯示沒有傳入的消息http://localhost:15672/#/queues/%2F/yomtvraps

缺少什麼我在這裏? 我想在交換和隊列之間沒有設置正確的東西。但是什麼?

回答

0

問題基本上是:兩個路由密鑰都未設置,顯然交換和隊列需要密鑰。

發件人:

require "bunny" 

NAME_OF_QUEUE = "yomtvraps" 
NAME_OF_EXCHANGE = "yomtvraps" 

conn = Bunny.new(:automatically_recover => false) 
conn.start 

ch = conn.create_channel 
q = ch.queue("yomtvraps") 

puts "\tthere was already a queue named \"#{NAME_OF_QUEUE}\"" if conn.queue_exists?(NAME_OF_QUEUE) 
puts "\tthere was already a exchange named \"#{NAME_OF_EXCHANGE}\"" if conn.exchange_exists?(NAME_OF_EXCHANGE) 

exchange = ch.direct(NAME_OF_EXCHANGE, :durable => true) 

exchange.publish("Hello World!", :routing_key => NAME_OF_QUEUE) 
puts " [x] Sent 'Hello World!'" 

conn.close 

接收機:

require "bunny" 

NAME_OF_QUEUE = "yomtvraps" 
NAME_OF_EXCHANGE = "yomtvraps" 

conn = Bunny.new(:automatically_recover => false) 
conn.start 

ch = conn.create_channel 
q = ch.queue(NAME_OF_QUEUE) 

exchange = ch.direct(NAME_OF_EXCHANGE, :durable => true) # this is how logstash 

begin 
    puts " [*] Waiting for messages. To exit press CTRL+C" 
    q.bind(exchange, :routing_key => NAME_OF_QUEUE).subscribe(:block => true) do |delivery_info, properties, body| 
    puts " [x] Received #{body}" 
    end 
rescue Interrupt => _ 
    conn.close 

    exit(0) 
end 

輸出(在兩個不同的終端):

$ ruby send_exchange.rb 
    there was already a queue named "yomtvraps" 
    there was already a exchange named "yomtvraps" 
[x] Sent 'Hello World!' 

$ ruby receive_queue.rb 
[*] Waiting for messages. To exit press CTRL+C 
[x] Received Hello World! 
相關問題