2017-03-25 21 views
0

使用Vertx EventBus我用Ruby編寫的2個非常簡單Vertx verticles:無法從官方的代碼示例上Vertx.io

### sender.rb 
require 'vertx/vertx' 
require 'date' 
vertx = Vertx::Vertx.vertx() 
event_bus = vertx.event_bus() 
vertx.set_periodic(2000) { |v| 
msg = "Ruby NOW " + DateTime.now.strftime("%H:%M:%S") 
puts(msg) 
event_bus.publish("news.uk.sport", msg) 
} 

### listener.rb 
require 'vertx/vertx' 
vertx = Vertx::Vertx.vertx() 
event_bus = vertx.event_bus() 
consumer = event_bus.consumer("news.uk.sport") 
consumer.handler() { |message| 
puts "I have received a message: #{message.body()}" 
} 
consumer.completion_handler() { |res_err,res| 
if (res_err == nil) 
puts "The handler registration has reached all nodes" 
else 
puts "Registration failed!" 
end 
} 

我有完全構建這兩個verticles來自vertx.io文檔的代碼示例。

我打開2個終端會話。 在第一終端I部署sender.rb verticle:

$ vertx run sender.rb 

在第二終端i部署listener.rb verticle:

$ vertx run listener.rb 

發送方發送和打印的消息,但聽者,不接收任何事情(從listener.rb輸出沒有打印)

我試圖用標誌運行vertx

-ha

-cluster 

,但它並沒有幫助。請幫忙。

UPDATE

非常感謝Tsegismont 我已經重新實現兩個listener.rb和sender.rb和它的工作:)

現在我只是有一點問題純粹是出於好奇:

在我的發件人:

 simple_eventbus git:(master) ✗ vertx run sender.rb -cluster 
Starting clustering... 
No cluster-host specified so using address 192.168.7.179 
Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 2071 ms, time limit is 2000 
Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 3073 ms, time limit is 2000 
You're already on a Vert.x context, are you sure you want to create a new Vertx instance? 
Succeeded in deploying verticle 
On Sender site: We now have a clustered event bus: #<Vertx::EventBus:0x61deddf7> 
The message has been sent: 13:20:13 
The message has been sent: 13:20:15 
The message has been sent: 13:20:17 

的sender.rb是:

require 'vertx/vertx' 
require 'date' 

options = { 
} 
Vertx::Vertx.clustered_vertx(options) { |res_err,res| 
    if (res_err == nil) 
    vertx = res 
    event_bus = vertx.event_bus() 
    puts "On Sender site: We now have a clustered event bus: #{event_bus}" 
    vertx.set_periodic(2000) { |v| 
     msg = "Message from Sender: ruby message NOW " + DateTime.now.strftime("%H:%M:%S") 
     puts "The message has been sent: " + DateTime.now.strftime("%H:%M:%S") 
     event_bus.publish("news.uk.sport", msg) 
    } 
    else 
    puts "Failed: #{res_err}" 
    end 
} 

和我的listener.rb輸出:

simple_eventbus git:(master) ✗ vertx run listener.rb -cluster 
Starting clustering... 
No cluster-host specified so using address 192.168.7.179 
Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 2169 ms, time limit is 2000 
Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 3172 ms, time limit is 2000 
You're already on a Vert.x context, are you sure you want to create a new Vertx instance? 
Succeeded in deploying verticle 
On listener side: We now have a clustered event bus: #<Vertx::EventBus:0x44af7bbf> 
The handler registration has reached all nodes 
I have received a message: Message from Sender: ruby message NOW 13:20:13 
I have received a message: Message from Sender: ruby message NOW 13:20:15 
I have received a message: Message from Sender: ruby message NOW 13:20:17 

的listener.rb代碼:

require 'vertx/vertx' 
options = { 
} 
Vertx::Vertx.clustered_vertx(options) { |res_err,res| 
    if (res_err == nil) 
    vertx = res 
    event_bus = vertx.event_bus() 
    puts "On listener side: We now have a clustered event bus: #{event_bus}" 

    consumer = event_bus.consumer("news.uk.sport") 
    consumer.handler() { |message| 
     puts "I have received a message: #{message.body()}" 
    } 

    consumer.completion_handler() { |res_err,res| 
     if (res_err == nil) 
      puts "The handler registration has reached all nodes" 
     else 
      puts "Registration failed!" 
     end 
    } 
    else 
    puts "Failed: #{res_err}" 
    end 
} 

以我sender.rb的eventBus對象分配爲:

#<Vertx::EventBus:0x61deddf7> 

在我的listener.rb中有所不同:

#<Vertx::EventBus:0x44af7bbf> 

它只是對象實例引用嗎? 不一定是要共享的同一個對象實例嗎?

而另一個問題是爲什麼它告訴我onDeploy?

Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 3073 ms, time limit is 2000 
You're already on a Vert.x context, are you sure you want to create a new Vertx instance? 

我已經運行一次代碼:vertx運行listener.rb -cluster

爲什麼沒有告訴我,我已經在Vertx方面?

+0

有人有什麼想法嗎?仍然沒有運氣... – JavaJedi

+0

任何想法傢伙? – JavaJedi

回答

0

問題是您的代碼創建了一個獨立的Vert.x實例。要創建集羣Vert.x實例,請按照以下示例進行操作:

require 'vertx/vertx' 
options = { 
} 
Vertx::Vertx.clustered_vertx(options) { |res_err,res| 
    if (res_err == nil) 
    vertx = res 
    eventBus = vertx.event_bus() 
    puts "We now have a clustered event bus: #{eventBus}" 
    else 
    puts "Failed: #{res_err}" 
    end 
} 

from Vert.x Event Bus clustering documentation section。

+0

Yahoo!有用!謝謝Tsegismont! – JavaJedi