Spring Cloud(三) zookeeper實現服務治理 原

1.安裝ZooKeeper

我這裏直接使用docker安裝zookeeper,docker是個好東西,推薦大家使用,安裝docker和常用命令的使用可以去找找資料學習下

2. 服務註冊和發現

1.1 Maven依賴

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>


    <!-- ZK依賴 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    </dependency>

    <!--修改後立即生效,熱部署-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

1.2 SpringBoot主程序

/**
 *
 * @author lpf
 */
@SpringBootApplication
@EnableDiscoveryClient
public class LemonZkApplication {


    public static void main(String[] args) {
        SpringApplication.run(LemonZkApplication.class, args);
    }
}

1.3 配置文件

server:
  port: 5001
endpoints:
  restart:
    enabled: true
spring:
  application:
    name: lemon-zk
  cloud:
    zookeeper:
      discovery:
        root: /lemon-service #服務註冊的跟節點
        enabled: true
        register: true #是否需要進行服務註冊
      connect-string: 192.168.199.156:2181 #zk集羣主機,多個用逗號隔開

1.4 測試controller

這裏注意getInstances方法參數是你配置的應用名稱,區分大小寫(因爲Eureka的習慣我一直用大寫,導致查找不到服務)

@RestController
public class TestController {
    @Autowired
    DiscoveryClient discoveryClient;

    @GetMapping("/test")
    public String test() {
        //獲取實例化的註冊節點
        List<ServiceInstance> list = discoveryClient.getInstances("lemon-zk");

        //獲取實例化的服務
        StringBuffer sb = new StringBuffer();
        if (list != null && list.size() > 0 ) {
            sb.append(list.get(0).getUri()+",");
        }
        return "hello world  "+sb.toString();
    }
}

測試結果,這裏有一個問題,怎麼讓註冊的是服務的ip地址呢,這裏顯示的是服務的主機名,找了好久資料沒發現,知道的大佬們告知一聲

zookeeper下的節點信息

在這裏介紹下Zookeeper與Eureka這兩種服務治理框架的區別。Spring Cloud Eureka實現的服務治理機制強調了CAP原理中的AP,即可用性與可靠性,而Zookeeper這類強調CP(一致性、可靠性)。Eureka爲了實現更高的服務可用性,犧牲了一定的一致性,在極端情況下它寧願接受故障實例也不要丟掉“健康”實例,比如,當服務註冊中心的網絡發生故障斷開時,由於所有的服務實例無法維持續約心跳,在強調CP的服務治理中將會把所有服務實例都剔除掉,而Eureka則會觸發保護機制,保留此時的所有節點,以實現服務間依然可以進行互相調用的場景。

碼雲:https://gitee.com/lemonLove/lemon-cloud

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章