sb2.0新版springcloud微服務(wù)實(shí)戰(zhàn):Consul+Zuul+Feign/Ribbon+Hystrix Turbine+Config+sleuth+zipkin

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)忍坷。

微信截圖_20180811140827.png

一粘舟、搭建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ò)誤信息元潘。


3.png

三畔乙、搭建服務(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钥庇。
    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')
  • 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è)上。


4.png

我們的sc-provider已經(jīng)注冊(cè)到eureka上了净宵,訪問(wèn)接口,成功裹纳。


6.png

四择葡、搭建消費(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上。


5.png

注冊(cè)成功后酱酬,訪問(wèn)接口壶谒,測(cè)試是否正確。

8.png

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;
    }
}
9.png

五刑峡、用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


6.png

這時(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)短了很多

11.png

六、用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è)面服鹅。

13.png

然后在那個(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)題。

12.png

七富纸、使用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

14.png

點(diǎn)擊依賴分析,可以看到調(diào)用服務(wù)鏈嗤形,因?yàn)檫@塊只涉及到兩個(gè)服務(wù)精偿,所以只有兩個(gè),在實(shí)際生產(chǎn)環(huán)境中赋兵,這塊可能有很多笔咽,到時(shí)候看起來(lái)就特別直觀了。

微信截圖_20180811123550.png
微信截圖_20180811123512.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霹期,一起剝皮案震驚了整個(gè)濱河市叶组,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌历造,老刑警劉巖甩十,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件船庇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡枣氧,警方通過(guò)查閱死者的電腦和手機(jī)溢十,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)达吞,“玉大人,你說(shuō)我怎么就攤上這事荒典±医伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵寺董,是天一觀的道長(zhǎng)覆糟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)遮咖,這世上最難降的妖魔是什么滩字? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮御吞,結(jié)果婚禮上麦箍,老公的妹妹穿的比我還像新娘。我一直安慰自己陶珠,他們只是感情好挟裂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著揍诽,像睡著了一般诀蓉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暑脆,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天渠啤,我揣著相機(jī)與錄音,去河邊找鬼添吗。 笑死沥曹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的根资。 我是一名探鬼主播架专,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玄帕!你這毒婦竟也來(lái)了部脚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裤纹,失蹤者是張志新(化名)和其女友劉穎委刘,沒(méi)想到半個(gè)月后丧没,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锡移,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年呕童,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淆珊。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡夺饲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出施符,到底是詐尸還是另有隱情往声,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布戳吝,位于F島的核電站浩销,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏听哭。R本人自食惡果不足惜慢洋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陆盘。 院中可真熱鬧普筹,春花似錦、人聲如沸礁遣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祟霍。三九已至杏头,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沸呐,已是汗流浹背醇王。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崭添,地道東北人寓娩。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像呼渣,于是被迫代替她去往敵國(guó)和親棘伴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容