我有一项任务(我稍后会对此进行描述)据我所知,Hazelcast是最佳选择。但它有很多功能和用法,所以我无法理解究竟要选择什么。
实际上任务是:
我有Java服务器应用程序A和Java服务器应用程序B.我有几个Java服务器,其中一些持有A app实例,其中一些持有B实例,有些持有两者。
我需要在所有服务器之间存储一个地图。 A和B都可以放入地图,B可以按键从地图中读取。
所以我认为我需要一个分布式地图,但我无法理解我需要的其他功能是什么?什么是备份配置?我是否需要B的分布式查询才能按键查找?我需要“Hazelcast客户端”吗?
答案 0 :(得分:2)
Hazelcast是一个很棒的工具。同意看到你需要的东西是令人生畏的,但它比你想象的要简单:)
首先需要运行一个或多个Hazelcast节点以使网格运行(推荐2个或更多节点以提供冗余)。
如果服务器A / B嵌入了hazelcast节点,或者您在服务器A / B外部运行hazelcast网格并使用HazelcastClient与之通信,则由您决定。
您最适合评估此决定。通过将hazelcast网格节点嵌入到服务器A / B中,可能更容易。如果您发现它不适合您,请运行单独的hazelcast网格并切换到在服务器A / B中使用HazelcastClient。
您需要为网格配置一些端口以运行,最常见的配置是localhost:5701,以及此处的增量端口(5702,5703等)。
要分发您的数据,这很容易 - 配置一个淡褐色地图,给它一个名字,并设置备份计数(值为1就可以了)。
我在这里看不到您需要分布式查询,因为IMap<K,V>
可以让您访问所需的数据。
这有帮助吗?您还有其他具体问题吗?
Hazelcast文档相当不错,还有一个活跃的用户社区。 p> 祝你好运!
答案 1 :(得分:0)
史蒂夫!非常感谢你的回答。最后在我的逻辑课程中,我创建了一个与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">...
一切似乎一切正常,但后来我注意到tomcat错误日志消息中的hazelcast不时启动新端口,所以很快就开始了
Members [1] {
Member [127.0.0.1]:5701 this
}
现在它的
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
}
并继续增长...... 我不明白为什么它在这台机器上使用所有这些端口