分布式系统中的异步事件触发器? (Java)的

时间:2014-12-09 09:28:03

标签: java asynchronous netty zeromq distributed-system

我正在实施一个运行共识协议的分布式系统。我使用的算法对我的问题无关紧要。我关心的是系统中节点之间的通信。我需要一种方法来允许节点之间的异步消息传递。某些类型的消息应该在侦听节点中触发事件。例如

(node_1) sendMessageA()              ---> (node_2, ..., node_n) recvMessageA()
(node_2, ..., node_n) sendMessageB() ---> (node_1) recvMessageB()
(node_1) sendMessageC()              ---> (node_2, ..., node_n) recvMessageC()
...

基本上,我有一个可以从给定node_i调用的函数,这应该向系统中的其他节点发送消息,并在其他节点中触发相应的函数。这些消息在此分布式系统中需要是异步的。

有哪些好的框架或工具可以帮助进行此类沟通?

我知道NettyZeroMQ,它们似乎都与此类问题相关,但我也没有经验。 哪一个更适合此类问题?有没有更好的选择?我更喜欢使用java的框架,但我会考虑使用其他语言的技术。

2 个答案:

答案 0 :(得分:0)

我建议你研究JGroups。它是一个基于Java的组通信工具包。如果查看文档,您将看到可以通过实现Protocol接口添加所需的功能。它需要一点时间来适应它,但文档非常好。此外,community非常大:如果遇到困难,您应该能够轻松找到帮助。

答案 1 :(得分:0)

我决定使用的解决方案是Apache Thrift。即使我没有将它用于跨语言通信,它仍然非常有用,因为它允许我创建一个我希望在节点之间使用的接口的简单定义,然后它自动生成相应的类。引用他们的网站:

  

不是编写大量的样板代码来序列化和传输对象并调用远程方法,而是可以直接开展业务。

这绝对是正确的,经过几个小时的学习Thrift如何工作,我能够与RPC建立通信。