[英]I can't make Spring Boot and Hazelcast cluster work
我正在嘗試在 spring 引導集群應用程序中使用共享緩存。 似乎一切正常,但是當我嘗試從應用程序的第二個實例中檢索緩存值時,它沒有從緩存值中獲取它。
似乎每個應用程序都在使用自己的緩存而不是共享它。
我按照此處找到的指南設置了一個簡單的環境https://hazelcast.com/blog/spring-boot/
我的代碼:
Controller.java
@Controller
@RequestMapping("/public/testcache")
public class TestCacheController {
@Autowired
BookService bookService;
@GetMapping("/get/{isbn}")
@ResponseBody
public String getBookNameByIsbn(@PathVariable("isbn") String isbn) {
return bookService.getBookNameByIsbn(isbn);
}
@GetMapping("/clear/cache")
@ResponseBody
public String clearCache() {
bookService.deleteCache();
return "done";
}
}
BookService.java
@Service
public class BookService {
@Cacheable("books")
public String getBookNameByIsbn(String isbn) {
return findBookInSlowSource(isbn);
}
private String findBookInSlowSource(String isbn) {
// some long processing
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Sample Book "+isbn;
}
@CacheEvict(value = {"books"}, allEntries = true)
public void deleteCache() {}
}
# hazelcast.yaml
hazelcast:
network:
join:
multicast:
enabled: true
當我啟動應用程序時,我總是得到正確的 output:
Members {size:2, ver:2} [
Member [192.168.178.107]:5702 - d53f2c3f-d66f-4ba3-bf8d-88d4935bde4e
Member [192.168.178.107]:5701 - 69860793-c420-48d3-990c-d0c30a3a92d6 this
]
我試過了:
在不同的端口上運行兩個 Spring 啟動應用程序
在不同的端口上運行兩個 tomcat
用 java 配置替換 yaml 配置
Java Based Configuration @Configuration @EnableCaching public class CacheConfigurator { @Bean public Config config() { Config config=new Config(); config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(true); return config; } }
每次我得到相同的結果時,每個應用程序似乎都在自己緩存。
附加信息:
也許您的每個 Spring 引導應用程序實際上都創建了兩個單獨的 Hazelcast 實例,並且它使用未集群的一個實例進行緩存。
請嘗試遵循以下指南:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.