Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 选择Hazelcast特征_Java_Hashmap_Distributed_Hazelcast - Fatal编程技术网

Java 选择Hazelcast特征

Java 选择Hazelcast特征,java,hashmap,distributed,hazelcast,Java,Hashmap,Distributed,Hazelcast,我有一个任务(我稍后再描述),据我所知,Hazelcast是最好的选择。但是它有这么多的特性和用法,所以我不知道到底要选什么 实际上,任务是: 我有Java服务器应用程序A和Java服务器应用程序B。我有几个Java服务器,其中一些持有应用程序实例,一些持有B实例,一些持有两者 我需要在所有服务器之间存储一个映射。A和B都可以放入地图,B可以通过按键读取地图 所以我想我需要一个分布式地图,但我不知道我还需要什么其他功能?什么是备份配置?B按键查找是否需要分布式查询?我需要“Hazelcast客户

我有一个任务(我稍后再描述),据我所知,Hazelcast是最好的选择。但是它有这么多的特性和用法,所以我不知道到底要选什么

实际上,任务是:
我有Java服务器应用程序A和Java服务器应用程序B。我有几个Java服务器,其中一些持有应用程序实例,一些持有B实例,一些持有两者

我需要在所有服务器之间存储一个映射。A和B都可以放入地图,B可以通过按键读取地图


所以我想我需要一个分布式地图,但我不知道我还需要什么其他功能?什么是备份配置?B按键查找是否需要分布式查询?我需要“Hazelcast客户端”吗?

Hazelcast是一个很好的工具。同意看到你需要什么会让人望而生畏,但这比你想象的要简单:)

您首先需要运行一个或多个Hazelcast节点来运行网格(建议使用2个或更多节点以提供冗余)

服务器A/B是否有嵌入式hazelcast节点,或者是否在服务器A/B外部运行hazelcast网格并使用hazelcast客户端与之对话,这取决于您

你最适合评估这个决定。在服务器a/B中嵌入hazelcast网格节点可能更容易开始。如果您发现它不适合您,请运行单独的hazelcast网格并切换到在服务器a/B中使用hazelcast客户端

您需要为网格配置一些要运行的端口,最常见的配置是localhost:5701,以及从这里开始的增量端口(5702、5703等)

要分发数据,这非常简单-配置hazelcast映射,给它一个名称,并设置备份计数(值为1就可以了)

我看不出您在这里需要分布式查询,因为
IMap
应该允许您访问所需的数据

这有用吗?你还有其他具体问题吗

Hazelcast文档相当不错,而且还有一个活跃的用户社区


祝你好运

史蒂夫!非常感谢你的回答。最后,在我的逻辑类中,我创建了一个singleton来处理Hazelcast实例,如

final static String DistributedMapName = "SystemUserActivityMap";
private static HazelcastInstance instance = Hazelcast.newHazelcastInstance();
我还创建了一个hazelcast.xml,非常简单

 <network>
            <port auto-increment="true">5701</port>
            <join>
                <multicast enabled="false">
                    <multicast-group>224.2.2.3</multicast-group>
                    <multicast-port>54327</multicast-port>
                </multicast>
                <tcp-ip enabled="true">
                    <interface>127.0.0.1</interface>
                </tcp-ip>
                <aws enabled="false">
                </aws>
            </join>
        </network>
    <map name="SystemUserActivityMap">...
现在是

Members [9] {
    Member [127.0.0.1]:5701
    Member [127.0.0.1]:5702
    Member [127.0.0.1]:5703
    Member [127.0.0.1]:5704
    Member [127.0.0.1]:5705
    Member [127.0.0.1]:5706
    Member [127.0.0.1]:5707 this
    Member [127.0.0.1]:5708
    Member [127.0.0.1]:5709
}
继续成长。。。
我不明白为什么它会在这台机器上使用所有这些端口

Mikhail,你是否多次将web应用部署到tomcat?您是否在tomcat manager中或通过autodeploy(或如何)取消部署和部署?我有一种感觉,当您取消部署并且hazelcast实例没有关闭时,可能会出现内存/线程泄漏。如果完全重新启动tomcat会发生什么?请对此进行测试并让我知道结果。关于节点与客户端的问题正是我想知道的。。。。答案——试试看……没错,看看什么最适合你的情况。如果您发现(比如)已经有3个稳定的JVM在运行,那么将Hazelcast实例嵌入其中可能是有意义的。否则,运行一个由{x}节点组成的外部网格并通过HazelcastClient与之对话是非常容易的。现在我倾向于后一种情况,但一开始我发现前一种情况更容易。
Members [9] {
    Member [127.0.0.1]:5701
    Member [127.0.0.1]:5702
    Member [127.0.0.1]:5703
    Member [127.0.0.1]:5704
    Member [127.0.0.1]:5705
    Member [127.0.0.1]:5706
    Member [127.0.0.1]:5707 this
    Member [127.0.0.1]:5708
    Member [127.0.0.1]:5709
}