有什么方法可以在负载平衡集群上的多个 tomcat 之间共享对象吗?
Is there some way to share objects among multiple tomcat on a load-balanced cluster?
我在一个负载平衡集群上有两个 tomcat 个实例 运行。我也有一个应用程序运行在这两个实例上,我有两个疑惑:
当一个对象在一个实例中改变他的状态时,它是否在另一个实例中改变,即在两个实例上保持相同的状态(这个特定对象)?
如果答案是否定的,那么我如何在不使用数据库的情况下在两个实例上共享保持相同的对象状态?
如果可以在项目中添加一些依赖项,那么也许您应该考虑使用Hazelcast. It is quite easy to configure a cluster, and it offers an 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));
我在一个负载平衡集群上有两个 tomcat 个实例 运行。我也有一个应用程序运行在这两个实例上,我有两个疑惑:
当一个对象在一个实例中改变他的状态时,它是否在另一个实例中改变,即在两个实例上保持相同的状态(这个特定对象)?
如果答案是否定的,那么我如何在不使用数据库的情况下在两个实例上共享保持相同的对象状态?
如果可以在项目中添加一些依赖项,那么也许您应该考虑使用Hazelcast. It is quite easy to configure a cluster, and it offers an 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));