springCloud - 第10篇 - 服务间调用追踪 (zipkin 的使用)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

一、 在微服务系统中,不同应用服务可能会有各种不同的相互调用 。

    springcloud 集成了 zipkin 来实现对于不同服务调用的追踪和统计。

二、具体实现 。

1. Docker 方式安装并运行 zipkin 作为 zipkin 的 server,即服务追踪的服务端。

1.1 安装方式及运行见文章:Docker 方式安装 zipkin (linux 、阿里云ECS上安装)

运行效果如下图,此时,并没有服务调用记录,zipkin 管控中心 未展示任何追踪数据:

 1.2 在 base 工程 pom 中加上依赖:spring-boot-starter-web 。

完整依赖如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.base</groupId><artifactId>base-config</artifactId><version>0.0.1-SNAPSHOT</version><name>base-config</name><packaging>pom</packaging><description>整个 springCloud 体系基本 pom 配置</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version><!--lookup parent from repository查找顺序:relativePath元素中的地址–本地仓库–远程仓库。设定一个空值将始终从仓库中获取,不从本地路径获取。--><relativePath/></parent><!-- 配置远程发布到私服,mvn deploy --><!--<distributionManagement>--><!--&lt;!&ndash;releases:发布&ndash;&gt;--><!--<repository>--><!--<id>maven-releases</id>--><!--<name>Nexus Release Repository</name>--><!--<url>http://ergouzi.fun:8081/repository/maven-releases/</url>--><!--</repository>--><!--&lt;!&ndash;Snapshot:快照&ndash;&gt;--><!--<snapshotRepository>--><!--<id>maven-snapshots</id>--><!--<name>Nexus Snapshot Repository</name>--><!--<url>http://ergouzi.fun:8081/repository/maven-snapshots/</url>--><!--</snapshotRepository>--><!--</distributionManagement>--><!--定义子模块--><!--<modules>--><!--<module>bbb</module>--><!--<module>aaa</module>--><!--</modules>--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.RELEASE</spring-cloud.version></properties><dependencies><!--配置文件管理--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2. 新建工程 see-name 工程,作为一个 zipkin 客户端,对外暴露接口:查看姓名。

2.1. file  -- new  --  project 

2.2. spring Initializr - module SDK 选择自己的 JDK ,其余的可以不用填写,next。

2.3. 填写工程相关信息:包名、工程名等,next。

2.4.直接 next 

2.5. 工程名,代码存放位置等,finish 。

2.6.工程结构:

2.7. 在 pom 中引入 依赖:

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency>

完整依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>see-name</artifactId><version>0.0.1-SNAPSHOT</version><name>see-name</name><description>服务:查看姓名</description><parent><groupId>com.base</groupId><artifactId>base-config</artifactId><version>0.0.1-SNAPSHOT</version></parent><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency></dependencies></project>

2.8 在配置文件中配置 zipkin 服务地址 :spring.zipkin.base-url=http://ergouzi.fun:9411

端口设置为 8805 。

# 端口
server.port= 8805# 工程名
spring.application.name=see-name# zipkin 服务地址
spring.zipkin.base-url=http://ergouzi.fun:9411# zipkin 收集信息频率:默认为0.1
# 1 代表收集所有请求记录,但会有延迟
# spring.sleuth.sampler.percentage=1
# zipkin.sender.type=WEB

2.9 暴露接口 seeName、并调用 8806 端口的接口 seeAge 。以实现不同服务,相互调用。

完整启动类:

package com.seename;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class SeeNameApplication {public static void main(String[] args) {SpringApplication.run(SeeNameApplication.class, args);}@RequestMapping("/seeAge")public String seeAge() throws Exception {return HttpUtil.seeName("http://localhost:8806/seeAge");}@RequestMapping("/seeName")public String seeName() {return "姓名:小熊";}}

2.10 用工具类实现请求发送,HttpUtil 代码:

package com.seename;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;/*** @author yujiang* @description 发送请求工具类* @date 2019/8/5 18:27*/
public class HttpUtil {public static String seeName(String url) throws Exception {URL restURL = new URL(url);HttpURLConnection conn = (HttpURLConnection) restURL.openConnection();conn.setRequestMethod("GET");conn.setDoOutput(true);conn.setAllowUserInteraction(false);BufferedReader bReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line, resultStr = "";while (null != (line = bReader.readLine())) {resultStr += line;}bReader.close();return resultStr;}}

3. 同样方法新建工程 see-age 工程,作为一个 zipkin 客户端,对外暴露接口:查看年龄。

3.1 工程结构:

3.2 同样加依赖,并配置好 zipkin 服务地址:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>see-age</artifactId><version>0.0.1-SNAPSHOT</version><name>see-age</name><description>服务:查看年龄</description><parent><groupId>com.base</groupId><artifactId>base-config</artifactId><version>0.0.1-SNAPSHOT</version></parent><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency></dependencies></project>

端口设置为:8806 。 

# 端口
server.port= 8806# 工程名
spring.application.name=see-age# zipkin 服务地址
spring.zipkin.base-url=http://ergouzi.fun:9411

3.3 暴露接口 seeAge、并调用 8805 端口的接口 seeName 。以实现不同服务,相互调用。

package com.seeage;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class SeeAgeApplication {public static void main(String[] args) {SpringApplication.run(SeeAgeApplication.class, args);}@RequestMapping("/seeName")public String seeName() throws Exception {return HttpUtil.seeName("http://localhost:8805/seeName");}@RequestMapping("/seeAge")public String seeAge() {return "16岁";}
}

4. 浏览器分别请求这 4 个接口(一定要先请求接口,zipkin管控中心 才会有追踪数据)

http://localhost:8805/seeName 、http://localhost:8805/seeAge 、

http://localhost:8806/seeName 、http://localhost:8806/seeAge  

5.查看 zipkin管控中心 追踪数据。

5.1 点击 “依赖” 查看到服务间依赖对应:

PS:我不确定 zipkin 的延迟到底为多久,昨天我反复测试,但此页面依赖关系一直没有任何记录,到今天早上依旧无果。一刻钟前再次刷新,终于有如下图的记录了。项目代码并未作改动 。

5.2 点击 “查看” ,可以看到接口请求记录:

可以单独查看对应接口请求: 

 至此,zipkin 已经正常运行并追踪到服务间调用。

-------------------------------------------------------------

下一篇:springCloud - 第11篇 - Eureka 注册中心集群的实现

源码见:

https://gitee.com/FJ_WoMenDeShiJie/springcloud-base

https://gitee.com/FJ_WoMenDeShiJie/springcloud-seeAge

https://gitee.com/FJ_WoMenDeShiJie/springcloud-seeName

-------------------------------------------------------------

PS:这个系列不定时更新,只是个人的学习分享,

内容全程参考书目:

《Spring Cloud 与 Docker 微服务架构空实战 》、

《Spring Cloud 微服务实战》及此书作者博客:http://blog.didispace.com/spring-cloud-learning/

《深入理解 Spring Cloud 与微服务构建》及此书作者博客:https://blog.csdn.net/forezp/article/details/70148833
--------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广东48.6万人资产超600万 华东超600万人群最多

中国有290万人资产超600万元 6.7万人资产过亿 个人资产600万元以上有290万人 亿万资产以上的人有6.7万人 胡润研究院昨天发布的《2014中国高净值人群心灵投资白皮书》&#xff08;以下简称《白皮书》&#xff09;显示&#xff0c;截至2013年年底&#xff0c;全国个人资产600…

Idea 同一工程根据不同配置文件启动、idea 同一工程多实例同时运行

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、需求&#xff1a;有一个 eureka 工程&#xff0c;有2个配置文件。需要根据不同的配置文件启动 2 次&#xff0c;并保证 2 个实例同时…

H.265:网络视频的高清时代

HEVC/H.265标准LOGO 去年八月&#xff0c;爱立信公司推出了首款H.265编解码器&#xff0c;而在仅仅六个月之后&#xff0c;国际电联&#xff08;ITU&#xff09;就正式批准通过了HEVC/H.265标准&#xff0c;标准全称为高效视频编码&#xff08;High Efficiency Video Coding&am…

springCloud - 第11篇 - Eureka 注册中心集群的实现

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 eureka 作为整个微服务项目的注册中心&#xff0c;到目前为止&#xff0c;在我的系统中一直是单节点的&#xff0c;这样并不能作到高可用…

Idea 插件 lombok 的安装和使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 C#在写一个实体类时&#xff0c;有属性的写法&#xff0c;省去了写getter和setter的麻烦。 在Java编程时&#xff0c;写完字段后&#x…

主宰全球的10大算法

摘要&#xff1a;Reddit有篇帖子介绍了算法对我们现在生活的重要性&#xff0c;以及哪些算法对现代文明所做贡献最大&#xff0c;一起来看下。 【编者按】Reddit有篇帖子介绍了算法对我们现在生活的重要性&#xff0c;以及哪些算法对现代文明所做贡献最大。这个表单并不完整&a…

企业贡献开源,其背后的战略动机是什么?

本文作者Balaji Viswanathan通过对Google、Apple、Facebook、Android、Openstack项目等案例进行分析&#xff0c;总结了企业在开源上的战略性选择&#xff0c;是很有可能帮助企业战胜对手的绝好手段。大多数公司通过使用开源软件获得了很多竞争上的优势&#xff0c;这一点毋庸置…

解决:[ERROR] Error executing Maven. [ERROR] 1 problem was encountered while building the effective set

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 报错如下&#xff1a; [ERROR] Error executing Maven. [ERROR] 1 problem was encountered while building the effective setting…

贡献开源项目没那么简单,你要负责到底

贡献开源项目不是一件简单的事&#xff0c;不是说上传项目到Github或类似的网站&#xff0c;就万事大吉了&#xff0c;更不能认为你的项目代码现在已经开源了。还有很多事情要跟进完善。也就是说你要对这个项目负责到底。从长远角度来看&#xff0c;开源贡献必须是一条双行道。…

mybatis show sql 打印 SQL 语句到控制台

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方法一&#xff1a; 即&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuratio…

解决:Throwable:Stub index points to a file without PSI: com.intellij.openapi.fileTypes.UnknownFileType

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. IDEA 报错&#xff1a;stub index point to a file without PSI 并且IDEA 中左边栏部分内容不断刷新&#xff0c;死循环一般的闪 .…

解决:Truncated incorrect DOUBLE value: xxxX-1‘

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 运行 sql 报错&#xff0c;如题&#xff1a; Truncated incorrect DOUBLE value: XXxX-1 2. 原因&#xff1a;字串要加引号&…

IDEA 中的.iml文件和.idea文件夹 ( 隐藏方式 )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 初次使用IDEA&#xff0c;创建一个maven工程&#xff0c;发现在目录结构中产生了两个不一样的东西&#xff1a;.iml 文件和 .idea 文件夹…

springCloud - 第12篇 - 服务监控 Hystrix 面板

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 前面有用过 Hystrix 熔断&#xff0c;在多服务运行时。可以通过 Hystrix 的监控面板来实时观察各个服务的运行健康、效率和请求量等。 …

专访Google数据科学家彭晨:大数据成为潮流走近各行各业!

摘要&#xff1a;在“2014中美大数据研讨会”开始之前&#xff0c;CSDN采访了谷歌公司数据科学家彭晨&#xff0c;他表示之所以“大数据”火&#xff0c;是因为人类第一次可以精确的、系统的、实时的、全方位的、永久的获取、记录、分析、并保存海量的数据。 端午节后6月6日&a…

解决:ClassNotFoundException: com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 场景&#xff0c;springcloud 学习工程中&#xff0c;把 feign 和 ribbon 工程 作为应用服务&#xff0c;纳入 hystrix-turbine 服务…

解决:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused:

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 场景&#xff1a;启动一个需要注册到 eureka 注册中心的服务 seeParam 报错&#xff1a; com.sun.jersey.api.client.ClientHandle…

springCloud - 第13篇 - 服务监控 集群模式 Hystrix-turbine

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 在springcloud 体系中&#xff0c;可以用 hystrix-dashboard 实时监控服务的运行状态。上一文记录了单实例的监控&#xff0c;现在实…

解决:Error response from daemon: Cannot restart container xxx: driver failed programming external

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 我的情况&#xff1a;个人站点访问不了&#xff0c;重启了阿里云ECS服务器后&#xff0c;发现服务器 80端口不通&#xff0c;于是重启…

专访许鹏:谈C程序员修养及大型项目源码阅读与学习

摘要&#xff1a;阅读源码是开源项目最好的学习方式&#xff0c;然而真正的执行起来却并不容易。这里我们为大家分享许鹏的源码阅读经验、C程序员的修养以及Spark和Storm源码走读博文。 对许鹏的第一印象来源于其Bolg的粗读&#xff0c;最早时候更准确说应该是博文的粗略统计—…