springcloud-微服務項目開發

一、服務端

  1. 添加依賴
    <properties>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties>
    <!--服務端依賴-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. application.properties文件配置
    server.port=8761
    
    #實例地址
    eureka.instance.hostname=localhost
    eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}
    #禁止自己作爲服務器
    eureka.client.register-with-eureka=false
    #屏蔽註冊信息
    eureka.client.fetch-registry=false
    #關閉自我保護
    eureka.server.enable-self-preservation=false
    
    #關閉“沒有用於註冊服務器的副本節點”的警告信息
    logging.level.com.netflix.eureka=off
    logging.level.com.netflix.discovery=off
    
  3. 啓動類加註解@EnableEurekaServer
    @SpringBootApplication
    //springCloud:註冊中心的服務端
    @EnableEurekaServer
    public class Springcloud01Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Springcloud01Application.class, args);
        }
    }
    

二、客戶端

  1. 添加依賴
    	<properties>
            <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>2.2.2.RELEASE</version>
            </dependency>
        </dependencies>
        
    	<dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
  2. application.properties文件配置
    server.port=8085
    
    # redis數據庫配置
    spring.redis.database=0
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.password=
    
    spring.application.name=requestCityData-eureka-feign
    #Eureka客戶端配置
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka
    
  3. 啓動類加註解@EnableEurekaClient

三、消費者調用提供者提供的數據

  1. 添加依賴
    在消費者項目中加入依賴
    <!--feign   依賴-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
  2. application.properties中添加配置
    feign.client.config.feignName.connectTimeout=5000
    feign.client.config.feignName.readTimeout=5000
    
  3. 啓動類加註解@EnableFeignClients
  4. 自定義一個接口,不實現類
    添加註解:@FeignClient("cityDataProvider-eureka")cityDataProvider-eureka是提供者的客戶端名稱,如以下例子:
    方法使用註解@RequestMapping("/city/getCity"),調用提供者的controller層的路徑
    @FeignClient("cityDataProvider-eureka")
    public interface GetCityService {
        /**
         * 獲取城市信息
         */
        @RequestMapping("/city/getCity")
        public List<CityObj> getCity();
    }
    

四、使用網關
把兩個提供者的數據集合到一起

  1. 新建一個spring項目,選擇相關依賴:
    在這裏插入圖片描述
    在這裏插入圖片描述

  2. 啓動類上 加上註解 @EnableZuulProxy@EnableEurekaClient

  3. 配置application.properties文件

    server.port=8087
    
    spring.application.name=eureka-client-zuul
    eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
    # 城市 列表 提供者
    zuul.routes.city.path=/zuulCity/**
    zuul.routes.city.serviceId=cityDataProvider-eureka
    # 從redis數據庫取數據的 提供者
    zuul.routes.myapi.path=/myApi/**
    zuul.routes.myapi.serviceId=weatherDataProvider-eureka
    
  4. 測試獲取數據
    使用配置中的路徑獲取數據
    例子:http://127.0.0.1:8087/zuulCity/cityData/cities

  5. 修改顯示頁面的微服務
    新建一個接口,把兩個提供者合二爲一

    /**
     *  使用 zuul 鏈接zuul
     */
    @FeignClient(value = "eureka-client-zuul")
    public interface GetCityAndWeather {
    
        /**
         * 獲取城市信息
         * @return
         */
        @RequestMapping("/zuulCity/city/getCity")        //路徑要和zull的路徑一致
        public List<CityObj> getCitiesToZuul();
    
        /**
         * 根據城市id獲取天氣信息
         * 不是定時存入數據庫的
         * @param cityId
         * @return
         */
        @RequestMapping("/myApi/weather/cityId/{cityId}")
        WeatherResponse getWeatherByCityIdToZuul(@PathVariable("cityId")String cityId);
    }
    
    
  6. 修改controller層,然後測試

五、熔斷器

  1. 介紹
    在微服務架構中多層服務之間會相互調用,如果其中有一層服務故障了,可能會導致一層服務或者多層服務故障,從而導致整個系統故障。這種現象被稱爲服務雪崩效應。

    SpringCloud 中的 Hystrix 組件就可以解決此類問題,Hystrix 負責監控服務之間的調用情況,連續多次失敗的情況進行熔斷保護。

    保護的方法就是使用 Fallback,當調用的服務出現故障時,就可以使用 Fallback 方法的返回值;

    Hystrix 間隔時間會再次檢查故障的服務,如果故障服務恢復,將繼續使用服務。

  2. 使用熔斷器
    導入依賴:

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    
  3. 啓動類加註解:@EnableCircuitBreaker

  4. 配置文件添加:feign.hystrix.enabled=true

  5. 修改 feign 的調用接口
    @FeignClient註解裏面添加內容:fallback = GetCityAndWeatherFallBack.class,然後定義一個實現該接口的類GetCityAndWeatherFallBack,在實現類中填充數據數據

    @FeignClient(value = "eureka-client-zuul",fallback = GetCityAndWeatherFallBack.class)
    

    實現接口類:

    public class GetCityAndWeatherFallBack implements GetCityAndWeather {
        @Override
        public List<CityObj> getCitiesToZuul() {
            /**
             * 可以在這裏 創建數據
             */
            return null;
        }
    
        @Override
        public WeatherResponse getWeatherByCityIdToZuul(String cityId) {
            return null;
        }
    }
    
  6. 把兩個提供者的微服務關閉,測試

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