我在负载均衡的集群上运行了两个tomcat实例。我还有一个在这两个实例上运行的应用程序,我有两个疑问:
当一个对象在一个实例中改变状态时,它是否会在另一个实例上发生变化,即在两个实例上保持相同的状态(该特定对象)?
如果答案为否,那么如何在不使用数据库的情况下共享两个实例上保持相同的对象状态?
答案 0 :(得分:3)
如果可以向项目添加一些依赖项,那么您可以考虑使用Hazelcast。配置集群非常容易,它提供IAtomicReference,似乎非常适合您的需求。
要在代码中启动Hazelcast群集中的节点,您只需运行:
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
如果未定义,则通过读取某些配置xml或使用默认设置来创建实例。要创建和分配将存储和分发对象的原子引用,可以调用类似:
IAtomicReference<Foo> ref = instance.getAtomicReference("terefere");
if(ref.isNull()){
ref.set(new Foo());
}
然后,您可以通过向其应用函数来更改引用对象的状态,如:
ref.apply(foo -> foo.setBar(true));