sb2.0新版springcloud微服務(wù)實(shí)戰(zhàn):Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
springboot 版本是 2.0.3.RELEASE 别伏,springcloud 版本是 Finchley.RELEASE
本篇文章是springboot2.x升級(jí)后的升級(jí)springcloud專貼蹄衷,因?yàn)橹鞍姹靖乱呀?jīng)好久了,好多人評(píng)論可不可以出個(gè)新版本厘肮,大家一定要注意愧口,這是springboot2.x版本的,springboot1.x的請(qǐng)參考 點(diǎn)擊查看文章类茂,基本組件都不變就是升級(jí)jar包版本耍属,主要就是hystrix-dashboard使用有點(diǎn)變化。
相信現(xiàn)在已經(jīng)有很多小伙伴已經(jīng)或者準(zhǔn)備使用springcloud微服務(wù)了巩检,接下來(lái)為大家搭建一個(gè)微服務(wù)框架厚骗,后期可以自己進(jìn)行擴(kuò)展。會(huì)提供一個(gè)小案例: 服務(wù)提供者和服務(wù)消費(fèi)者 碴巾,消費(fèi)者會(huì)調(diào)用提供者的服務(wù)溯捆,新建的項(xiàng)目都是用springboot厦瓢,附源碼下載啤月,推薦使用coding地址下載,因?yàn)榭梢郧袚Q分支,后期可以及時(shí)更新。
coding倉(cāng)庫(kù)地址(推薦下載): coding地址 遠(yuǎn)程配置倉(cāng)庫(kù)地址 遠(yuǎn)程配置倉(cāng)庫(kù)地址
如果有問(wèn)題請(qǐng)?jiān)谙逻呍u(píng)論容燕,或者200909980加群交流』槎龋或者關(guān)注文章結(jié)尾微信公眾號(hào)蘸秘,私信后臺(tái)
Eureka/Consul/Zookeeper:服務(wù)發(fā)現(xiàn) (根據(jù)情況選擇一個(gè),eureka已經(jīng)宣布閉源)
Hystrix:斷路器
Zuul:智能路由
Ribbon/Feign:客戶端負(fù)載均衡 (Feign用的更多)
Turbine&hystrix-dashboard:集群監(jiān)控
Springcloud-config:遠(yuǎn)程獲取配置文件
接下來(lái),我們開(kāi)始搭建項(xiàng)目蝗茁,首先我們到spring為我們提供的一個(gè)網(wǎng)站快速搭建springboot項(xiàng)目秘血,點(diǎn)擊訪問(wèn),我這里用的是gradle评甜,如果各位客官喜歡用maven灰粮,好吧你可以到http://mvnrepository.com/查看對(duì)應(yīng)的依賴,點(diǎn)我訪問(wèn)忍坷。
一粘舟、搭建consul服務(wù)
使用 eureka 作為服務(wù)發(fā)現(xiàn) 請(qǐng)參考點(diǎn)擊查看使用eureka作為服務(wù)注冊(cè)中心
springclound-consul作為服務(wù)發(fā)現(xiàn)的核心,第一個(gè)搭建佩研,后面的服務(wù)都要注冊(cè)到consul上柑肴,意思是告訴consul自己的服務(wù)地址是啥。當(dāng)然還可以用zookeeper或者eureka旬薯。
- 1下載安裝consul
consul的下載地址consul下載地址晰骑,根據(jù)自己電腦系統(tǒng)下載對(duì)應(yīng)的包。
我這里是windows64绊序,網(wǎng)上說(shuō)要配置環(huán)境變量硕舆,就可以直接使用,但是我這里不行骤公。具體方法是抚官,下載解壓后是一個(gè).exe可執(zhí)行文件,然后配置當(dāng)前路勁到path中阶捆,然后直接在cmd命令窗口中凌节,輸入consul agent -dev 就可以啟動(dòng)了,如果不行的話洒试,就在cmd命令窗口進(jìn)如到consul的下載目錄倍奢,然后執(zhí)行上面的命令。然后consul的默認(rèn)端口是8500垒棋,直接在瀏覽器打開(kāi)http://localhost:8500卒煞,就可以看到控制臺(tái)了
2.png
二、搭建config-server服務(wù)sc-config-server
springcloud-config-server是用來(lái)將遠(yuǎn)程git倉(cāng)庫(kù)的配置文件動(dòng)態(tài)拉下來(lái)捕犬,這樣配置文件就可以動(dòng)態(tài)的維護(hù)了跷坝。當(dāng)然也可以選擇本地倉(cāng)庫(kù)酵镜。
新建一個(gè)springboot項(xiàng)目,修改maven私服地址柴钻,并加入一下依賴淮韭。
- 1.修改build.gradle文件
compile('org.springframework.cloud:spring-cloud-config-server')
compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
//連接config-server也需要用戶名和密碼
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-actuator')
- 2.修改application.yml文件
server:
port: 8800
spring:
security:
basic:
enabled: true
user:
name: root
password: booszy
application:
name: sc-config-server
cloud:
config:
server:
git:
uri: https://git.coding.net/yirenyishi/springcloud-config-profile
searchPaths: '{application}'
consul:
host: localhost
port: 8500
discovery:
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
ip-address: true
- 3.修改啟動(dòng)類
修改啟動(dòng)類,要加入這三個(gè)注解贴届,因?yàn)橐?cè)到consul上靠粪,所以需要@EnableDiscoveryClient這個(gè)注解
@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class Sb2scConfigApplication {
public static void main(String[] args) {
SpringApplication.run(Sb2scConfigApplication.class, args);
}
}
然后運(yùn)行啟動(dòng)springboot項(xiàng)目,等啟動(dòng)成功后訪問(wèn)consul的頁(yè)面毫蚓,會(huì)發(fā)現(xiàn)sc-config-server已經(jīng)注冊(cè)到上面了占键,如果啟動(dòng)報(bào)錯(cuò),請(qǐng)檢查錯(cuò)誤信息元潘。
三畔乙、搭建服務(wù)提供者服務(wù)sc-provider
編寫(xiě)一個(gè)服務(wù)提供者,為下邊的消費(fèi)者提供服務(wù)翩概,用到了spring-webflux(spring新出的非阻塞式框架)不是springmvc牲距,當(dāng)然你們公司用什么你還是繼續(xù)用什么。
- 注意 : 這里除了application.xml,還需要一個(gè)bootstrap.yml, 因?yàn)閎ootstrap.yml得加載順序是在application.xml前邊,服務(wù)注冊(cè)和config配置必須放到bootstrap.yml钥庇。
- 修改build.gradle文件
compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
compile('org.springframework.cloud:spring-cloud-starter-config')
compile('org.springframework.boot:spring-boot-starter-webflux')
compile('org.springframework.boot:spring-boot-starter-actuator')
- 2.編寫(xiě)配置文件bootstrap.yml
** 注意 : 這里除了application.xml,還需要一個(gè)bootstrap.yml*
application.xml我是放到遠(yuǎn)程倉(cāng)庫(kù)地址的牍鞠,大家可以直接到我的遠(yuǎn)程倉(cāng)庫(kù),根據(jù)項(xiàng)目名(sc-provider-config)查詢评姨。配置文件的倉(cāng)庫(kù)地址:點(diǎn)擊訪問(wèn)难述。
spring:
application:
name: sc-provider
cloud:
consul:
host: localhost
port: 8500
discovery:
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
ip-address: true
config:
discovery:
enabled: true
service-id: sc-config-server
fail-fast: true
username: root
password: booszy
profile: csdn
- 3.編寫(xiě)代碼
編寫(xiě)主類
@EnableDiscoveryClient
@SpringBootApplication
public class Sb2scProviderApplication {
public static void main(String[] args) {
SpringApplication.run(Sb2scProviderApplication.class, args);
}
}
新建IndexController進(jìn)行測(cè)試,這里只是為了測(cè)試吐句,案例代碼使用的是webflux胁后,如果想使用springmvc,修改jar包依賴即可蕴侧。
@RestController
@RequestMapping("test")
public class IndexController {
//返回一個(gè)實(shí)體
@GetMapping("{msg}")
public Mono<String> sayHelloWorld(@PathVariable("msg") String msg) {
System.out.println("come on " + msg);
return Mono.just("sc-provider receive : " +msg);
}
//返回一個(gè)列表
@GetMapping("list")
public Flux<Integer> list() {
List<Integer> list = new ArrayList<>();
list.add(8);
list.add(22);
list.add(75);
list.add(93);
Flux<Integer> userFlux = Flux.fromIterable(list);
return userFlux;
}
}
運(yùn)行springboot項(xiàng)目,去consul查看择同,有沒(méi)有注冊(cè)上。
我們的sc-provider已經(jīng)注冊(cè)到eureka上了净宵,訪問(wèn)接口,成功裹纳。
四择葡、搭建消費(fèi)者服務(wù)sc-consumer
消費(fèi)者要訪問(wèn)服務(wù)提供者的服務(wù),這里用的是通過(guò)RestTemplate/feign請(qǐng)求resetful接口剃氧,使用ribbon做客戶端負(fù)載均衡敏储,hystrix做錯(cuò)誤處理,feign和ribbon二選一,案例中ribbon和feign都有朋鞍,也可以都用已添。
還是熟悉的配方妥箕,熟悉的味道,新建springboot項(xiàng)目更舞,添加項(xiàng)目依賴畦幢。
- 1.修改build.gradle文件
compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
compile('org.springframework.cloud:spring-cloud-starter-config')
compile('org.springframework.boot:spring-boot-starter-webflux')
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.cloud:spring-cloud-starter-openfeign')
compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')
- 2.修改bootstrap.yml文件
application.yml 在git倉(cāng)庫(kù),請(qǐng)前往git倉(cāng)庫(kù)查看缆蝉。
spring:
application:
name: sc-consumer
cloud:
consul:
host: localhost
port: 8500
discovery:
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
ip-address: true
config:
discovery:
enabled: true
service-id: sc-config-server
fail-fast: true
username: root
password: booszy
profile: csdn
#新版配置宇葱,否則后面dashboard無(wú)法找到hystrix.stream
management:
endpoints:
web:
exposure:
include: '*'
- 3.編寫(xiě)代碼
啟動(dòng)類代碼
@RibbonClient 指定服務(wù)使用的負(fù)載均衡類型,name不指定服務(wù)則為所有的服務(wù)打開(kāi)負(fù)載均衡刊头,也可以在用yml中進(jìn)行配置黍瞧。
@EnableHystrix 是支持hystrix打開(kāi)斷路器,在規(guī)定時(shí)間內(nèi)失敗參數(shù)超過(guò)一定參數(shù)原杂,就會(huì)打開(kāi)斷路器印颤,不會(huì)發(fā)起請(qǐng)求,而是直接進(jìn)入到錯(cuò)誤處理方法穿肄。
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrix
@SpringBootApplication
public class Sb2scConsumerApplication {
// ribbon需要配置年局,負(fù)載均衡
@Autowired
private RestTemplateBuilder builder;
// ribbon需要配置它抱,負(fù)載均衡
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return builder.build();
}
public static void main(String[] args) {
SpringApplication.run(Sb2scConsumerApplication.class, args);
}
}
1.ribbon案例
ribbon不需要單獨(dú)依賴堪嫂,新建 RibbonController
ribbon一個(gè)坑,不能接受List類型掏秩,要使用數(shù)組接收锐朴。
@HystrixCommand(fallbackMethod="fallbackMethod")
如果請(qǐng)求失敗兴喂,會(huì)進(jìn)入fallbackMethod這個(gè)方法,fallbackMethod這個(gè)方法要求參數(shù)和返回值與回調(diào)他的方法保持一致焚志。
@RestController
public class RibbonController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/ribbon/{wd}")
@HystrixCommand(fallbackMethod="fallbackMethod")
public Mono<String> sayHelloWorld(@PathVariable("wd") String parm) {
String res = this.restTemplate.getForObject("http://sc-provider/test/" + parm, String.class);
return Mono.just(res);
}
public Mono<String> fallbackMethod(@PathVariable("wd") String parm) {
return Mono.just("fallback");
}
運(yùn)行springboot項(xiàng)目衣迷,先看有沒(méi)有注冊(cè)到consul上。
注冊(cè)成功后酱酬,訪問(wèn)接口壶谒,測(cè)試是否正確。
ribbon使用就是這么簡(jiǎn)單膳沽,ribbon是springboot自帶汗菜,所以不需要單獨(dú)添加依賴。
2.feign案例
在實(shí)際開(kāi)發(fā)中挑社,feign使用的還是挺多的陨界,feign底層還是使用了ribbon。廢話不多說(shuō)痛阻,直接上步驟菌瘪,在服務(wù)消費(fèi)者中使用feign訪問(wèn)服務(wù)提供者。
- 1配置文件
ribbon:
ReadTimeout: 30000
ConnectTimeout: 15000
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 10000
feign的默認(rèn)請(qǐng)求超時(shí)時(shí)間是1s阱当,所以經(jīng)常會(huì)出現(xiàn)超時(shí)的問(wèn)題俏扩,這里我設(shè)置的是10s糜工。ribbon的請(qǐng)求時(shí)間也要設(shè)置,因?yàn)閒eign用的是ribbon录淡。這里貼的是application.yml文件中的一小段
- 2 編碼
1捌木、主類注解
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrix
這三個(gè)都要,hystrix主要作用是斷路器赁咙,會(huì)進(jìn)如fein的fallback中钮莲。 主類代碼在上面已經(jīng)貼出來(lái)了
2、編寫(xiě)feign接口彼水,MFeignClient.class
name是指要請(qǐng)求的服務(wù)名稱崔拥。這里請(qǐng)求的是服務(wù)提供者
fallback 是指請(qǐng)求失敗,進(jìn)入斷路器的類凤覆,和使用ribbon是一樣的链瓦。
configuration 是feign的一些配置,例如編碼器等盯桦。
@FeignClient(name = "sc-provider",fallback = MFeignClientFallback.class, configuration = MFeignConfig.class)
public interface MFeignClient {
// 這是被請(qǐng)求微服務(wù)的地址慈俯,也就是provider的地址
@GetMapping(value = "/test/{msg}")
String sayHelloWorld(@PathVariable("msg") String msg);
@GetMapping(value = "/test/list")
List<Integer> list();
@GetMapping(value = "/test/list")
Integer[] array();
}
- 3 MFeignConfig.class feign的配置
這里配置了feign的打印日志等級(jí)
@Configuration
public class MFeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
- 4 MFeignClientFallback.class ,斷路器回調(diào)方法
斷路器要實(shí)現(xiàn)上邊定義的MFeignClient接口拥峦,請(qǐng)求失敗贴膘,進(jìn)入斷路器時(shí),會(huì)回調(diào)這里的方法略号。
@Component
public class MFeignClientFallback implements MFeignClient{
@Override
public String sayHelloWorld(String msg) {
return "fallback";
}
@Override
public List<Integer> list() {
return new ArrayList<>();
}
@Override
public Integer[] array() {
return new Integer[0];
}
}
- 5 在controller中使用feign
@RestController
public class FeignController {
@Autowired
private MFeignClient feignClient;
@GetMapping("/feign/{wd}")
public Mono<String> sayHelloWorld(@PathVariable("wd") String parm) {
String result = feignClient.sayHelloWorld(parm);
return Mono.just(result);
}
@GetMapping("/feign/list")
public Flux<Integer> list() {
List<Integer> list = feignClient.list();
Flux<Integer> userFlux = Flux.fromIterable(list);
return userFlux;
}
@GetMapping("/feign/array")
public Flux<Integer> array() {
Integer[] arrays = feignClient.array();
Flux<Integer> userFlux = Flux.fromArray(arrays);
return userFlux;
}
}
五刑峡、用zuul做路由轉(zhuǎn)發(fā)和負(fù)載均衡
這些微服務(wù)都是隱藏在后端的,用戶是看不到玄柠,或者不是直接接觸突梦,可以用nginx或者zuul進(jìn)行路由轉(zhuǎn)發(fā)和負(fù)載均衡,zuul負(fù)載均衡默認(rèn)用的是ribbon羽利。
- 1.修改build.gradle文件
compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
compile('org.springframework.cloud:spring-cloud-starter-config')
compile('org.springframework.cloud:spring-cloud-starter-netflix-zuul')
compile('org.springframework.boot:spring-boot-starter-actuator')
- 2.修改bootstrap.yml
還是原來(lái)的配方宫患,application.yml在git倉(cāng)庫(kù)
spring:
application:
name: sc-zuul
cloud:
consul:
host: localhost
port: 8500
discovery:
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
ip-address: true
config:
discovery:
enabled: true
service-id: sc-config-server
fail-fast: true
username: root
password: booszy
profile: csdn
- 3.啟動(dòng)類
@RefreshScope這個(gè)注解是當(dāng)application.yml配置文件發(fā)生變化的時(shí)候,不需要手動(dòng)的進(jìn)行重啟这弧,調(diào)用localhost:8400/refresh,就會(huì)加載新的配置文件娃闲,當(dāng)然正在訪問(wèn)的客戶并不影響還是使用舊的配置文件,因?yàn)椴皇侵貑⒇依耍髞?lái)的用戶會(huì)使用新的配置文件畜吊。注意這塊的刷新要用post請(qǐng)求。
@EnableDiscoveryClient
@SpringBootApplication
@EnableZuulProxy
@RefreshScope
public class Sb2scZuulApplication {
public static void main(String[] args) {
SpringApplication.run(Sb2scZuulApplication.class, args);
}
}
啟動(dòng)springboot項(xiàng)目户矢,訪問(wèn)consul
這時(shí)候,我們就要通過(guò)zuul訪問(wèn)微服務(wù)了殉疼,而不是直接去訪問(wèn)微服務(wù)梯浪。
應(yīng)該訪問(wèn)地址http://localhost:8400/sc-consumer/feign/list捌年,這塊你要換成你的zuul地址。
但是有些人就會(huì)說(shuō)挂洛,這樣以后用戶請(qǐng)求會(huì)不會(huì)太長(zhǎng)礼预,比較反感,所以可以通過(guò)配置進(jìn)行修改訪問(wèn)地址虏劲。
zuul:
routes:
springcloud-consumer-config: /consumer/**
springcloud-provider-config: /provider/**
在application.yml中加入這樣一段配置托酸,其實(shí)就是nginx中的反向代理,使用一下簡(jiǎn)短的可以代理這個(gè)微服務(wù)柒巫。這個(gè)時(shí)候我們就可以這樣去訪問(wèn)了http://localhost:8400/consumer/feign/list励堡,是不是簡(jiǎn)短了很多
六、用hystrix-turbine-dashboard 做集群監(jiān)控
項(xiàng)目在生產(chǎn)環(huán)境中堡掏,每個(gè)服務(wù)的訪問(wèn)量都不通应结,有些服務(wù)的訪問(wèn)量比較大,有時(shí)候有些服務(wù)掛了泉唁,不能繼續(xù)服務(wù)鹅龄,需要重啟的時(shí)候,我們并不知道亭畜,所以這時(shí)候就需要使用hystrix-turbine-dashboard做一個(gè)監(jiān)控扮休,監(jiān)控所有的微服務(wù),可以看到這個(gè)接口實(shí)時(shí)訪問(wèn)量拴鸵,和健康狀況玷坠。
新建一個(gè)springboot項(xiàng)目,老套路宝踪,加入如下依賴
- 1 添加依賴
compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')
compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix-dashboard')
compile('org.springframework.cloud:spring-cloud-starter-netflix-turbine')
如果啟動(dòng)的時(shí)候報(bào)錯(cuò)要排除一下eureka依賴
configurations {
compile.exclude module: 'eureka-client'
}
- 2 修改application.yml配置文件
注意:是application.yml侨糟,這里不需要bootstrap.yml
server:
port: 8900
turbine:
aggregator:
clusterConfig: default
appConfig: sc-consumer
clusterNameExpression: "'default'"
spring:
application:
name: sc-dashboard
cloud:
consul:
host: localhost
port: 8500
discovery:
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
ip-address: true
appConfig 后面是要檢測(cè)的注冊(cè)在consul上的服務(wù)名,必須要有
如果啟動(dòng)報(bào)錯(cuò)瘩燥,找不到hystrix.stream秕重,在你要監(jiān)控的微服務(wù)加入如下配置。
management:
endpoints:
web:
exposure:
include: '*'
- 3 修改主類
@EnableTurbine 厉膀,@EnableHystrixDashboard 一個(gè)都不能少
@EnableDiscoveryClient
@SpringBootApplication
@EnableTurbine
@EnableHystrixDashboard
public class Sb2scDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(Sb2scDashboardApplication.class, args);
}
}
- 4 訪問(wèn)測(cè)試
這塊的端口是8900溶耘,訪問(wèn)地址http://localhost:8900/hystrix,看到的是下面的頁(yè)面服鹅。
然后在那個(gè)網(wǎng)址的輸入框里輸網(wǎng)址http://localhost:8900/turbine.stream凳兵,點(diǎn)擊monitor stream。剛打開(kāi)的時(shí)候可能是空的企软,什么也沒(méi)有庐扫,這并不表示你已經(jīng)錯(cuò)了。這時(shí)候你訪問(wèn)消費(fèi)者服務(wù)的接口,例如訪問(wèn)http://localhost:8400/consumer/feign/list形庭,多訪問(wèn)幾次铅辞,然后看控制臺(tái)有沒(méi)有出現(xiàn)一個(gè)監(jiān)控面板,沒(méi)有就等會(huì)刷新一次萨醒,如果一直不出現(xiàn)斟珊,應(yīng)該是配置有問(wèn)題。
七富纸、使用sleuth+zipkin 實(shí)現(xiàn)鏈路追蹤服務(wù)
在使用微服務(wù)的時(shí)候囤踩,我們發(fā)現(xiàn),有時(shí)候排錯(cuò)不好排查晓褪,所以就給大家整個(gè)這個(gè)鏈路追蹤堵漱,很方便知道是哪一個(gè)服務(wù)調(diào)用哪一個(gè)服務(wù)出現(xiàn)了問(wèn)題。因?yàn)橛行╉?xiàng)目可能服務(wù)比較多辞州。
- 1 添加依賴
新建一個(gè)springboot項(xiàng)目
雖然其他服務(wù)調(diào)用zipkin不是從eureka上動(dòng)態(tài)過(guò)去服務(wù)地址怔锌,而是硬編碼,但是這塊還是考慮吧zipkin注冊(cè)到eureka上变过。
compile('org.springframework.cloud:spring-cloud-starter-consul-discovery')
compile group: 'io.zipkin.java', name: 'zipkin-server', version: '2.9.3'
compile group: 'io.zipkin.java', name: 'zipkin-autoconfigure-ui', version: '2.9.3'
compile('org.springframework.boot:spring-boot-starter-actuator')
如果提示log4j有沖突埃元,要排除依賴
configurations {
compile.exclude module: 'log4j'
compile.exclude module: 'slf4j-log4j12'
compile.exclude module: 'spring-boot-starter-logging'
}
- 2 修改application配置文件
server:
port: 9411
spring:
application:
name: sc-sc-zipkin
profiles:
active: csdn
cloud:
consul:
host: localhost
port: 8500
discovery:
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
ip-address: true
management:
metrics:
web:
server:
auto-time-requests: false
- 3 主類注解添加
@EnableZipkinServer 主要是這個(gè)注解
啟動(dòng)服務(wù)后訪問(wèn)http://localhost:9411,就可以打開(kāi)zipkin的控制臺(tái)頁(yè)面,這時(shí)候應(yīng)該是什么都沒(méi)有
@EnableDiscoveryClient
@SpringBootApplication
@EnableZipkinServer
public class Sb2scZipkinApplication {
public static void main(String[] args) {
SpringApplication.run(Sb2scZipkinApplication.class, args);
}
}
- 4 其他服務(wù)中調(diào)用
這里我們?cè)谙M(fèi)者服務(wù)和提供者服務(wù)里都加入如下依賴
compile('org.springframework.cloud:spring-cloud-starter-sleuth')
compile('org.springframework.cloud:spring-cloud-starter-zipkin')
然后修改配置文件媚狰,bootstrap.yml岛杀、
這塊zipkin的地址是硬編碼的,目前還沒(méi)發(fā)現(xiàn)怎么從服務(wù)注冊(cè)中心eureka上動(dòng)態(tài)獲取崭孤,以后有解決方案类嗤,會(huì)更新帖子
sleuth這個(gè)是配置提取率,可以配置也可以不配置
spring:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
percentage: 1.0
啟動(dòng)服務(wù)辨宠,然后訪問(wèn)消費(fèi)者服務(wù)的接口遗锣,這時(shí)候訪問(wèn)zipkin的控制臺(tái)http://localhost:9411
點(diǎn)擊依賴分析,可以看到調(diào)用服務(wù)鏈嗤形,因?yàn)檫@塊只涉及到兩個(gè)服務(wù)精偿,所以只有兩個(gè),在實(shí)際生產(chǎn)環(huán)境中赋兵,這塊可能有很多笔咽,到時(shí)候看起來(lái)就特別直觀了。