Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Java的应用程序的发现机制API_Java_Api_Tcp_Udp_Cluster Computing - Fatal编程技术网

基于Java的应用程序的发现机制API

基于Java的应用程序的发现机制API,java,api,tcp,udp,cluster-computing,Java,Api,Tcp,Udp,Cluster Computing,我目前参与了一个项目,在该项目中,我们/应用程序需要能够发现在LAN上运行的具有相同应用程序名称的应用程序的其他实例(此后称为节点) 先决条件: 所有节点都知道自己的IP地址和TCP端口号 所有节点都有一个名称 所有节点都可以访问局域网 我需要的是: 所有节点都需要知道彼此节点的IP地址和TCP端口。 如果某个节点发生故障,则必须以编程方式通知我。 如果出现一个新节点,我将不得不通过编程方式得到通知。 重要的是不需要主服务器或其他应用程序,它必须是我可以集成到当前应用程序中的API。 此外,它必

我目前参与了一个项目,在该项目中,我们/应用程序需要能够发现在LAN上运行的具有相同应用程序名称的应用程序的其他实例(此后称为节点)

先决条件: 所有节点都知道自己的IP地址和TCP端口号 所有节点都有一个名称 所有节点都可以访问局域网

我需要的是:

所有节点都需要知道彼此节点的IP地址和TCP端口。 如果某个节点发生故障,则必须以编程方式通知我。 如果出现一个新节点,我将不得不通过编程方式得到通知。 重要的是不需要主服务器或其他应用程序,它必须是我可以集成到当前应用程序中的API。 此外,它必须是开源的,最好是MIT或ApacheV2许可的

就这些

应用程序是基于JVM的,所以任何API都可以。我一直在关注ZooKeeper,但它似乎对我们需要的小功能有很大的依赖性

而且,如果您不知道任何API,但有一些好的链接可以分享,比如如何通过自己编写API来实现这一点(白皮书、博客、书籍等等),我也非常乐意接受这样的事情

所以问题是,,
如何做到这一点?

如果您都在同一个子网中,一个简单的解决方案是使用。选择一个地址(好吧,让它可配置),然后当一个新实例启动时,它会发送一个多播“ping”。这会通知其他服务器

当然,这不会告诉您实例何时停止。您有两种选择:

  • Ping的频率足够高,当您在一定时间内没有收到Ping时,您假定实例已关闭;或
  • 当您收到新实例的通知时,您将打开到该实例的TCP连接。您必须减少ping该套接字的次数以保持其打开(不活动最终仍将杀死它),并且您可以收到另一方关闭它的通知或套接字超时的TCP语义

  • 您将需要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的问题?