java - Hazelcast 成员不共享嵌入式拓扑中的条目
问题描述
我有一个小型 Spring Boot 应用程序,我正在使用 Hazelcast(嵌入式缓存拓扑)进行缓存。这是 Hazelcast 的 @Configuration 类:
@Configuration
@EnableCaching
public class HazelcastConfig {
public static final String BANKS = "banks";
@Bean
Config config() {
Config config = new Config();
MapConfig mapConfig = new MapConfig();
mapConfig.setTimeToLiveSeconds(3000);
config.getMapConfigs().put(BANKS, mapConfig);
return config;
}
}
然后我将 @Cachable 注释添加到我的方法之一:
@Cacheable(HazelcastConfig.BANKS)
public UserAccount findByAccountNumber(String accountNumber){
logger.info("INSIDE REPO");
UserAccount userAccount = new UserAccount();
userAccount.setAccountNumber(accountNumber);
userAccount.setId(new Long(1));
userAccount.setAddress("via Rossi");
userAccount.setName("Pippo");
return userAccount;
}
一切似乎都运行良好:我第一次调用该方法时,程序进入了方法本身的主体;从程序第二次从缓存中获取值(程序没有进入方法体内部)。
当我运行 2 个应用程序实例时,问题就开始了;当我运行第二个实例时,我可以看到 Hazelcast 知道有 2 个成员(来自日志):
Members {size:2, ver:2} [
Member [172.15.245.39]:5701 - cec4e04a-a8ef-4bd1-9072-5c313ba14666
Member [172.15.245.39]:5702 - bfe7d9a0-dcfd-4a9e-8a10-3e3882e814d2 this
]
但是这 2 个成员似乎有 2 个单独的缓存;这是我的测试:
- 启动应用程序实例 1(tomcat 端口 8080)
- 启动应用程序实例 2(tomcat 端口 8090)
- 从实例 1 调用方法-> 程序不使用缓存(OK,因为缓存为空)
- 从实例 1 调用方法-> 程序使用缓存(好的,因为现在缓存有条目)
- 从实例 2 调用方法-> 程序不使用缓存(KO,因为我认为两个实例的缓存应该具有相同的条目)。
有什么建议吗?
解决方案
推荐阅读
- sql - 循环依赖 - 表插入错误
- grails - Grails GORM:在 beforeUpdate 上更新关联对象的属性未持久化
- java - Weblogic Server 启动期间 JVM 崩溃和巨大的错误日志
- angular - Angular 6 - @types/googlemaps/index.d.ts' 不是一个模块
- php - 如何从我的服务器 [PHP] 读取 .txt 文件?
- python - 从另一个python文件导入类错误
- wordpress - 制作联系表格 7 添加自定义必填复选框
- swift - Swift拆分视图控制器,首次加载时出现“重复”通知
- php - 如何从 JSON 文件中正确动态显示表头和行
- javascript - 来自节点 js 的异步 python 脚本