基于Java的应用程序的发现机制API
我目前参与了一个项目,在该项目中,我们/应用程序需要能够发现在LAN上运行的具有相同应用程序名称的应用程序的其他实例(此后称为节点) 先决条件: 所有节点都知道自己的IP地址和TCP端口号 所有节点都有一个名称 所有节点都可以访问局域网 我需要的是: 所有节点都需要知道彼此节点的IP地址和TCP端口。 如果某个节点发生故障,则必须以编程方式通知我。 如果出现一个新节点,我将不得不通过编程方式得到通知。 重要的是不需要主服务器或其他应用程序,它必须是我可以集成到当前应用程序中的API。 此外,它必须是开源的,最好是MIT或ApacheV2许可的 就这些 应用程序是基于JVM的,所以任何API都可以。我一直在关注ZooKeeper,但它似乎对我们需要的小功能有很大的依赖性 而且,如果您不知道任何API,但有一些好的链接可以分享,比如如何通过自己编写API来实现这一点(白皮书、博客、书籍等等),我也非常乐意接受这样的事情 所以问题是,,基于Java的应用程序的发现机制API,java,api,tcp,udp,cluster-computing,Java,Api,Tcp,Udp,Cluster Computing,我目前参与了一个项目,在该项目中,我们/应用程序需要能够发现在LAN上运行的具有相同应用程序名称的应用程序的其他实例(此后称为节点) 先决条件: 所有节点都知道自己的IP地址和TCP端口号 所有节点都有一个名称 所有节点都可以访问局域网 我需要的是: 所有节点都需要知道彼此节点的IP地址和TCP端口。 如果某个节点发生故障,则必须以编程方式通知我。 如果出现一个新节点,我将不得不通过编程方式得到通知。 重要的是不需要主服务器或其他应用程序,它必须是我可以集成到当前应用程序中的API。 此外,它必
如何做到这一点?如果您都在同一个子网中,一个简单的解决方案是使用。选择一个地址(好吧,让它可配置),然后当一个新实例启动时,它会发送一个多播“ping”。这会通知其他服务器 当然,这不会告诉您实例何时停止。您有两种选择:
您将需要1-2个线程来监视此事件并触发适当的事件。这类事情有很多选项,我个人最喜欢的是它是Apache许可的,并且没有依赖性,并且配置最少 一个更为成熟的选择是在LGPL下许可。我绝对推荐这是一个非常好的、非常积极的解决方案,并支持通过任何传输的任何类型的发现(IP多播、固定列表、外部查找服务等)
另一种选择是,但是JGroups更适合于发现(因为它支持任何类型的发现)。绝对最简单的方法——在我看来也是最简单的方法——是使用ZeroConf 每个节点都会宣布自己,并在其他节点出现和消失时收听。没有中央注册表,只有多播DNS。非常好用——看看OSX就知道了
可移植的方法是使用jmdns——OS X的方法是使用Apple Java facade。绝对是Cletus,问题是使用原始构建块(手动心跳等)从头开始构建它可能会增加解决方案出现边缘情况的风险,可靠性可能会受到影响。这就是为什么我希望利用站在某个巨人的肩膀上的优势:)我知道你的意思,但似乎每次我去寻找一个库来解决一个小而复杂的问题,你只需用一组角盒来交换一组特定于该库的角盒。@Cletus-看看ZeroConf-这就是你所描述的没错,production quality.JGroups看起来不错,我还通过另一个渠道找到了Apache部落。非常感谢!:)测试了
JGroups
,从我公司的网络安全人员那里得到消息说,坏流量来自我的机器。。。我想这是因为IP多播?我知道jgroups,我正在使用它,但由于你的回答,我刚刚发现了hazelcast,它看起来非常有趣……hazelcast是一个内存数据网格,它如何解决OP的问题?