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直接訪問:
檢視追蹤鏈路:
呼叫關係:
以上,版本升級與基本框架搭建完成。