Hazelcast 5.3.5连接错误:如何通过MutableConfiguration设置智能路由?
解决Hazelcast 5.3.5 JCache模式下设置Smart Routing为false的问题
问题原因
你之前尝试的config.getNetworkConfig().setSmartRouting(false)无效,是因为MutableConfiguration是JCache标准的配置类,并不包含Hazelcast的网络配置项——getNetworkConfig()属于Hazelcast自身的Config(嵌入式模式)或ClientConfig(客户端模式)类。
本地运行出现连接5703被拒绝的警告,是因为开启Smart Routing时,Hazelcast会尝试自动发现集群中的其他节点;若本地只有单个节点或节点地址配置不匹配,就会出现连接不存在节点的错误。关闭Smart Routing后,客户端只会连接指定的初始节点,避免此类问题。
正确实现方式
方式1:嵌入式模式(Hazelcast实例与应用同进程)
直接创建Hazelcast核心配置并关闭Smart Routing,再关联到JCache的CacheManager:
@PostConstruct private void initialize() { // 创建Hazelcast核心配置,关闭Smart Routing Config hazelcastConfig = new Config(); hazelcastConfig.getNetworkConfig().setSmartRouting(false); // 初始化Hazelcast嵌入式实例 HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(hazelcastConfig); // 获取Hazelcast专属的缓存提供者 HazelcastCachingProvider cachingProvider = (HazelcastCachingProvider) Caching.getCachingProvider(); // 基于Hazelcast实例创建CacheManager CacheManager cacheManager = cachingProvider.getCacheManager(hazelcastInstance.getName()); // 配置JCache基础属性 final MutableConfiguration<Integer, MyCustomResponse> config = new MutableConfiguration<>(); config.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(HOURS, 2))); config.setTypes(Integer.class, MyCustomResponse.class); // 创建缓存 Cache<Integer, MyCustomResponse> myCache = cacheManager.createCache("myCache", config); }
方式2:客户端模式(连接独立Hazelcast集群)
如果你的应用作为客户端连接外部Hazelcast集群,需要配置客户端的Smart Routing:
@PostConstruct private void initialize() { // 创建Hazelcast客户端配置 ClientConfig clientConfig = new ClientConfig(); // 关闭客户端的Smart Routing clientConfig.getNetworkConfig().setSmartRouting(false); // 指定要连接的集群节点地址(根据实际集群配置调整) clientConfig.getNetworkConfig().addAddress("127.0.0.1:5701"); // 初始化Hazelcast客户端实例 HazelcastInstance hazelcastInstance = HazelcastClient.newHazelcastClient(clientConfig); // 获取Hazelcast专属缓存提供者并关联客户端实例 HazelcastCachingProvider cachingProvider = (HazelcastCachingProvider) Caching.getCachingProvider(); CacheManager cacheManager = cachingProvider.getCacheManager(hazelcastInstance.getName()); // 配置JCache基础属性 final MutableConfiguration<Integer, MyCustomResponse> config = new MutableConfiguration<>(); config.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(HOURS, 2))); config.setTypes(Integer.class, MyCustomResponse.class); // 创建缓存 Cache<Integer, MyCustomResponse> myCache = cacheManager.createCache("myCache", config); }
注意事项
- 确保引入了Hazelcast JCache的依赖(
hazelcast-jcache),避免类转换错误。 - 若使用Spring等框架,也可以通过配置类或配置文件设置Hazelcast的Smart Routing,编程方式则更灵活。
内容的提问来源于stack exchange,提问作者DAA
相关产品推荐
相关产品推荐

