You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:13:13