我正在使用Hazelcast(版本3.2),以便在两个运行的App实例之间有一个distributedQueue(两个不同的JVM,节点通过tcp连接)。我的每个实例都是一个Node和我的每个实例有异步客户端。
出于某种原因,我必须更改distributedQueue的最大大小和备份过程(从异步到同步)。 我需要每次运行至少一个我的实例,我将更改每个实例的hazelcast配置并一个接一个地重启实例(tomcat)。
我的问题是: 配置差异会不会成为问题?
我的分布式队列在我的每个实例(节点)的hazelcast-config文件中配置。
其他问题: 我的分布式队列是否只需要只有一个节点Hazelcast配置文件?如果两个节点是群集的一部分,则必须在每一侧声明DistributedQueue或仅声明一个?
由于
更新
我使用从localhost开始的两个节点和两个不同的配置进行了快速测试:一个带有分布式队列,名为" testQueue"最大大小= 90,另一个具有相同的队列名称但最大大小= 70。
@Test
public void twoNodesWithDifferentQueueConfiguration() throws Exception {
Config config1 = new ClasspathXmlConfig("hazelcast-node-1-config.xml");
HazelcastInstance hz1 = Hazelcast.newHazelcastInstance(config1);
Config config2 = new ClasspathXmlConfig("hazelcast-node-2-config.xml");
HazelcastInstance hz2 = Hazelcast.newHazelcastInstance(config2);
System.out.println("Local Queue of Hz1 remaining capacity : "+hz1.getQueue("testQueue").remainingCapacity());
System.out.println("Local Queue of Hz2 remaining capacity : "+hz2.getQueue("testQueue").remainingCapacity());
HazelcastInstance hazelcastClient = HazelcastClient.newHazelcastClient(getClientConfig());
hazelcastClient.getQueue("testQueue").add(UUID.randomUUID().toString());
System.out.println("Local Queue of Hz1 remaining capacity : "+hz1.getQueue("testQueue").remainingCapacity());
System.out.println("Local Queue of Hz2 remaining capacity : "+hz2.getQueue("testQueue").remainingCapacity());
}
两个节点相互连接并形成一个集群。如果使用一个简单的java客户端并将一个项添加到名为" testQueue"的队列中。每个节点的队列最大剩余大小似乎不同。
Local Queue of Hz1 remaining capacity : 90
Local Queue of Hz2 remaining capacity : 70
mai 18, 2016 3:54:30 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test2] is STARTING
mai 18, 2016 3:54:30 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test2] is STARTED
mai 18, 2016 3:54:30 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test2] is CLIENT_CONNECTED
mai 18, 2016 3:54:30 PM com.hazelcast.client.spi.ClientClusterService
INFOS:
Members [2] {
Member [127.0.0.1]:5701
Member [127.0.0.1]:5702
}
Local Queue of Hz1 remaining capacity : 89
Local Queue of Hz2 remaining capacity : 69
但它是相同的分布式对象吗?
答案 0 :(得分:1)
配置差异会不会成为问题?
是。所有节点的配置应该相同,并且应该在开始时定义。我相信,不支持动态配置。
我的分布式队列是否只需要只在一个节点中 Hazelcast配置文件?如果两个节点是群集的一部分, 必须在每一侧声明DistributedQueue还是只声明一个?
如果您使用XML方式配置Hazelcast,那么您可以在其中定义队列配置。如果以编程方式启动,那么在一个地方定义就足够了。请注意它是一个分布式数据结构,所以一旦你在一个节点中定义它,它就会被共享和放弃。分布在整个集群中。