乾貨分享微服務spring-cloud(8.服務治理和配置中心spring-cloud-zk)

前言

讀者:對spring、spring boot有一定了解

難度:初中級,旨在快速應用於項目

參考文獻:網絡、書籍、官方文檔,有任何錯誤歡迎大家留言拍磚指正

實戰模擬源碼:https://github.com/yhqnh/demo-springcloud,使用spring-cloud dalston版本


8.1.    服務治理

Spring-cloud-zookeeper提供的模式包括服務發現和配置,配置動態更新不需要手動請求/refresh端點。該項目通過自動配置並綁定到Spring環境和其他Spring編程模型成語,爲Spring Boot應用程序提供Zookeeper集成。通過幾個簡單的註釋,您可以快速啓用和配置應用程序中的常見模式,並使用基於Zookeeper的組件構建大型分佈式系統。FeignTurbineRibbonZuul均與Spring Cloud Zookeeper合作。

創建工程demo-springcloud-zookeeper,添加主要依賴spring-cloud-starter-zookeeper-config

啓用服務治理功能,添加主要依賴spring-cloud-starter-zookeeper-discovery啓用配置中心功能。順帶說一下添加依賴org.springframework.boot:spring-boot-configuration-processor是爲了

啓用Type-safe Configuration Properties

image.png

新建啓動類ZookeeperApplication@EnableDiscoveryClient啓用服務註冊和發現,@EnableFeignClients啓用feignClients,注意@FeignClient("demo-springcloud-zookeeper")這裏的name要與spring.application.name相同,也即服務名。

@Configuration
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@EnableFeignClients
public class ZookeeperApplication {

    @Value("${spring.application.name}")
    private String appName;

    @Autowired
    private LoadBalancerClient loadBalancer;

    @Autowired
    private DiscoveryClient discovery;

    @Autowired
    private Environment env;

    @Autowired
    private AppClient appClient;


    @Autowired
    private OwnerProperties ownerProperties;

    @RequestMapping("/")
    public ServiceInstance lb() {
        return this.loadBalancer.choose(this.appName);
    }

    @RequestMapping("/hi")
    public String hi() {
        return "Hello World! from " + this.discovery.getLocalServiceInstance();
    }

    @RequestMapping("/self")
    public String self() {
        return this.appClient.hi();
    }

    @RequestMapping("/getFromEnv")
    public String getFromEnv(@RequestParam("prop") String prop) {
        return new RelaxedPropertyResolver(this.env).getProperty(prop, "Not Found");
    }

    @RequestMapping("/getFromArchaius")
    public String getFromArchaius(@RequestParam("prop") String prop){
        return DynamicPropertyFactory.getInstance().getStringProperty(prop,"null").get();
    }

    @RequestMapping("/getFromConfigProperties")
    public String getFromConfigProperties(){
        return ownerProperties.getFirstName();
    }

    @FeignClient("demo-springcloud-zookeeper")
    interface AppClient {
        @RequestMapping(path = "/hi", method = RequestMethod.GET)
        String hi();
    }

    @Autowired
    RestTemplate rest;

    public String rt() {
        return this.rest.getForObject("http://" + this.appName + "/hi", String.class);
    }

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

    @Bean
    @LoadBalanced
    RestTemplate loadBalancedRestTemplate() {
        return new RestTemplate();
    }
}


配置文件application.properties配置spring.cloud.zookeeper.discovery.register開啓註冊服務,spring.cloud.zookeeper.config.enabled開啓配置服務,spring.cloud.zookeeper.connectString

配置連接zk地址

image.png

啓動zookeeper,啓動應用,服務註冊成功後位於zookeeper的services節點,get該節點查看數據驗證是否成功註冊服務

image.png

瀏覽器訪問http://localhost:8080/self接口,通過feign客戶端appClient訪問綁定的自己提供的rest接口服務/hi

image.png

8.2.    配置中心

Zookeeper提供了一個分層命名空間,允許客戶端存儲任意數據,如配置數據。Spring Cloud Zookeeper ConfigConfig ServerClient的替代方案。在特殊的引導階段,配置被加載到Spring環境中。默認情況下,配置存儲在/config命名空間中。根據應用程序的名稱和模擬解析屬性的Spring Cloud Config順序的活動配置文件,創建多個PropertySource實例。例如,名爲“testApp”的應用程序和“dev”配置文件將創建以下屬性源

config/testApp,dev
config/testApp
config/application,dev
config/application


Propertiesconfig/application命名空間適用於使用zookeeper進行配置的所有應用程序。config/testApp命名空間中的Properties僅適用於名爲“testApp”的服務實例。

創建zk節點/config並配置子節點/test並設置值爲“點融借款”和子節點person.first-name (person.firstName, person.first_name, PERSON_FIRST_NAME也可以)並設置值爲“點融理財”

image.png

瀏覽器訪問http://localhost:8080/getFromEnv?prop=test

image.png

瀏覽器訪問http://localhost:8080/getFromConfigProperties

image.png

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