簡體   English   中英

我無法使 Spring 引導和 Hazelcast 集群工作

[英]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
    ]

我試過了:

  1. 在不同的端口上運行兩個 Spring 啟動應用程序

  2. 在不同的端口上運行兩個 tomcat

  3. 用 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; } }

每次我得到相同的結果時,每個應用程序似乎都在自己緩存。

附加信息:

  • 我嘗試使用管理中心https://hazelcast.com/product-features/management-center/並且我可以連接到集群成員,但我從未在“地圖”下看到任何值
  • 我想知道 hazelcast 的實例是否已啟動但 spring 啟動時沒有使用它,而是使用他自己的簡單緩存
  • 我的 application.properties 是空的
  • Spring開機版2.4.4

也許您的每個 Spring 引導應用程序實際上都創建了兩個單獨的 Hazelcast 實例,並且它使用未集群的一個實例進行緩存。

請嘗試遵循以下指南:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM