import com.hazelcast.config.Config; import com.hazelcast.config.MapConfig; import com.hazelcast.config.QuorumConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; import com.hazelcast.quorum.QuorumException; public class ClusterQuorum { private static final String NAME = "AT_LEAST_TWO_NODES"; public static void main(String[] args) { QuorumConfig quorumConfig = new QuorumConfig(); quorumConfig.setName(NAME).setEnabled(true).setSize(2); MapConfig mapConfig = new MapConfig(); mapConfig.setName(NAME).setQuorumName(NAME); Config config = new Config(); config.addMapConfig(mapConfig); config.addQuorumConfig(quorumConfig); HazelcastInstance instance1 = Hazelcast.newHazelcastInstance(config); HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(config); IMap<String, String> map = instance1.getMap(NAME); // Quorum will succeed System.out.println("Quorum is satisfied, so the following put will throw no exception"); map.put("key1", "we have the quorum"); String value = map.get("key1"); System.out.println("'key1' has the value '" + value + "'"); // Quorum will fail System.out.println("Shutdown one instance, so there won't be enough members for quorum presence"); instance2.getLifecycleService().shutdown(); System.out.println("The following put operation will fail"); try { map.put("key2", "will not succeed"); } catch (QuorumException expected) { System.out.println("Put operation failed with expected QuorumException: " + expected.getMessage()); } Hazelcast.shutdownAll(); } }