1. 程式人生 > >Spring Cloud服務框架版本升級--JDK10+Gradle4.9+Spring Boot 2.0+Finchley.SR1

Spring Cloud服務框架版本升級--JDK10+Gradle4.9+Spring Boot 2.0+Finchley.SR1

目標:原有版本升級為Spring Boot 2.0與Spring Cloud Finchley.SR1,使用gradle管理工程,搭建註冊、配置、閘道器與追蹤框架,加入k8s api微服務

環境:IntelliJ IDEA

步驟:版本升級及其說明->註冊中心框架->配置中心框架->服務閘道器框架->服務追蹤框架->k8s api微服務改造->執行測試

1.版本升級及其說明

版本升級的主要物件:

jdk:1.8 -> 10

maven 3.5.0 -> gradle 4.9

spring boot:1.5.3 -> 2.0.4

spring cloud:Edgware.SR3 -> Finchley.SR1  

2.註冊中心框架

注:服務註冊中心eureka在jdk10版本下,需要新增配置,才能啟動tomcat應用。其原因為jdk10版本預設沒有載入JAXB-API。

解決方案:Run -> Edit Configurations 在VM選項增加 --add-modules java.se.ee

註冊中心主要工程結構:

build.gradle為專案依賴:以下幾個元件不再重複,僅展示增加的部分依賴,compile的部分為依賴

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
 
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
 
group = 'com.boe.cloud'
version = '1.0.0'
sourceCompatibility = 10
 
repositories {
    mavenCentral()
}
 
 
ext {
    springCloudVersion = 'Finchley.SR1'
}
 
dependencies {
 
    compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}
 
dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

*Application為主程式:使用@EnableEurekaServer註解

package com.boe.cloud.springcloud.eureka;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 
@SpringBootApplication
@EnableEurekaServer
public class SpringcloudEurekaApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudEurekaApplication.class, args);
    }
}

application.yml為配置檔案:設定為本地

server:
  port: 8761
 
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

3.配置中心框架

配置中心工程結構:與註冊中心類似

build.gradle為專案配置檔案:此處僅展示依賴部分,其他參考註冊中心

dependencies {
    compile('org.springframework.cloud:spring-cloud-config-server')
    compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

*Application.java為主程式:使用@EnableEurekaClient啟用註冊客戶端,將自身註冊至註冊中心,使用@EnableConfigServer啟用配置中心服務端

package com.boe.cloud.springcloud.config;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class SpringcloudConfigApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudConfigApplication.class, args);
    }
}

application.yml為配置檔案:其中git配置為配置檔案訪問的倉庫地址,可設定使用者名稱密碼登入

spring:
  application:
    name: Config-Server
  cloud:
    config:
      server:
        git:
          uri: git_url
          search-paths: path
          username: xxxxx
          password: xxxxx
      label: master
server:
  port: 8769
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

4.服務閘道器框架

閘道器工程結構:將配置檔案application.yml改為bootstrap.yml,該配置在git倉庫配置前生效

build.gradle為專案配置檔案:此處僅展示依賴部分,其他參考註冊中心

dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-config')
    compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
    compile('org.springframework.cloud:spring-cloud-starter-netflix-zuul')
    compile('org.springframework.cloud:spring-cloud-starter-zipkin')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

*Application.java:主程式,使用@EnableEurekaClient啟用註冊客戶端,將自身註冊至註冊中心,使用@EnableZuulProxy註解啟用閘道器

package com.boe.cloud.springcloud.zuul;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
 
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class SpringcloudZuulApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringcloudZuulApplication.class, args);
    }
}

bootstrap.yml配置檔案:啟動配置,應用相關配置在git倉庫

spring:
  application:
    name: Zuul-Gateway
  cloud:
    config:
      profile: dev
      label: master
      discovery:
        enabled: true
        service-id: Config-Server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

application.yml:git倉庫配置檔案,此處使用routes功能,對接k8s api微服務,zipkin為追蹤服務端

server:
  port: 5000
spring:
  sleuth:
    sampler:
      percentage: 1.0
  zipkin:
    base-url: http://localhost:9411
zuul:
  routes:
    k8sapi:
      path: /cloud/**
      serviceId: Service-Kubernetes

5.服務追蹤框架

注:spring boot 2.0版本之後不再支援zipkin開發,改為成熟元件,可以通過jar包或者docker映象的方式執行

在開發主機上以映象方式執行zipkin server

docker run -d -p 9411:9411 openzipkin/zipkin

6.執行測試

改造k8s api微服務:加入相關依賴,主程式使用@EnableEurekaClient註解與,配置zipkin選項與地址

訪問註冊中心:http://ip:8761

訪問kubernetes的服務,通過服務閘道器:http://ip:5000/cloud/**

此處使用swagger-ui直接訪問:

檢視追蹤鏈路:

呼叫關係:

以上,版本升級與基本框架搭建完成。