2017-03-25 22 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