2012-11-13 37 views
1

我有一个节点网络。节点必须能够相互发送消息。消息只能从节点发送到节点(即没有广播)。节点知道他们必须发送消息的节点的地址。节点不一定知道他们将从谁那里接收。一些节点(称为主节点)可能接收消息并将消息发送到非常多的节点(> 100k)。哪个消息服务用于Java中不可靠的网络

我希望能够从一个节点发送持久性消息到另一个节点。即使在不可靠的网络上,我也希望这会异步发生。即我希望消息服务为我处理重发,确认等。

我已经尝试使用ActiveMQ与经纪人的静态网络(在我的小设置中只有2个节点),如在http://activemq.apache.org/networks-of-brokers.html中所解释的。这对我的设置工作正常,但我预计将有大约100k节点与单个节点(称为主节点)相关联,然后必须运行100k代理才能将消息转发到所有关联的节点。所有节点可能偶尔发送,主节点有时可能必须发送到其他节点的几个(> 10k)(注意:没有广播,因为它们都收到不同的消息)。

我想象中使用的一个设置可以在这张图片http://i154.photobucket.com/albums/s260/sheep_p/communication.png中看到,其中柱面表示队列。这里每个节点都有一个入站队列和一个出站队列。

什么技术可以用来实现这一点,需要什么样的配置这种技术?

该技术必须与Java协同工作并拥有免费的私人或学术许可。

+1

所以你想通过不可靠的网络建立可靠的通信和高可扩展性?你有没有检查netty? –

+0

@ nikolay-kuznetsov感谢评论我一定会看看netty。回答你的问题:不,我以前没有考虑过。 – abondoa

回答

1

我从来没有遇到过可以做到这一点的开箱即用技术。

解决这个问题的一种方法是在内部使用队列(ActiveMQ),如图所示,并使用Netty.io或Jersey等服务创建API(我对Netty没有经验,但已经使用了Jersey对于类似的应用),外部。这需要一些编码,但是嘿并不是那么好? :)