Spring Cloud

rabbitmq+sleuth+zinkip 分布式链路追踪

情到浓时终转凉″ 提交于 2020-10-09 04:14:00
我们都知道,微服务之间通过feign传递,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。当业务流程足够复杂时,一个完整的HTTP请求调用链一般会经过多个微服务系统,要通过日志来跟踪一整个调用链变得不再那么简单。通过sleuth可以很方便的看出每个采集请求的耗时情况,分析出哪些服务调用比较耗时,当服务调用的耗时随着请求量的增大而增大时,可以针对业务做一些优化措施。所以我们可以通过我们可以通过Spring Cloud Sleuth来解决这个问题。这里我们将演示如何通过Spring Cloud Sleuth来追踪这个过程,并借助Zipkin以图形化界面的方式展示。 展示之前,分别介绍一下rabbitmq、sleuth、zinkip。 rabbitmq RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。 sleuth和zinkip sleuth 是spring cloud的组成部分之一,为springcloud应用实现了一种分布式追踪解决方案,其兼容了zinkip,HTrace和log

阿里朋友推荐的两个Github标星25k的后端快速开发脚手架!

本秂侑毒 提交于 2020-10-08 15:52:17
01 eladmin eladmin 是一款基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。 如何获取项目地址和配套VIP文档地址? 扫码关注下面的公众号后回复“004”即可! 这个开源项目基本稳定,并且后续作者还会继续优化。完全开源!这个真的要为原作者点个赞,如果大家觉得这个项目有用的话,建议可以稍微捐赠一下原作者支持一下。后端整理代码质量、表设计等各个方面来说都是很不错的。前后端分离,前端使用的是国内常用的 vue 框架,也比较容易上手。 后台首页 02 pig 这个项目因为其方便易用、功能齐全,社区活跃,受到了很多Java开发者的喜爱,很多企业都采用 pig 搭建了自己的网站。 pig 提供了开源版和付费的商业版,商业版功能更加齐全一点。 另外,还提供了详细的技术文档。 如何获取项目地址和配套VIP文档地址? 扫码关注下面的公众号后回复“005”即可! 根据项目官网,简单介绍一下这个项目: 基于 Spring Cloud Hoxton 、Spring Boot 2.2、 OAuth2 的RBAC权限管理系统 基于数据驱动视图的理念封装 element-ui,即使没有 vue

Spring RestTemplate 请求返回数据乱码 json乱码 gzip 压缩问题

你离开我真会死。 提交于 2020-10-08 10:01:06
Spring RestTemplate 调用天气预报接口可能遇到中文乱码的问题,解决思路如下。 问题出现 我们在网上找了一个免费的天气预报接口 http://wthrcdn.etouch.cn/weather_mini?citykey=101280601 。我们希望调用该接口,并将返回的数据解析为 JSON 格式。 核心业务逻辑如下: private WeatherResponse doGetWeatherData ( String uri ) { ResponseEntity < String > response = restTemplate . getForEntity ( uri , String . class ); String strBody = null ; if ( response . getStatusCodeValue () == 200 ) { strBody = response . getBody (); } ObjectMapper mapper = new ObjectMapper (); WeatherResponse weather = null ; try { weather = mapper . readValue ( strBody , WeatherResponse . class ); } catch ( IOException e

5个可以写进简历的分布式开发实战项目

久未见 提交于 2020-10-07 15:55:30
给大家分享4个项目,别小看这四个项目。 互联网大部分公司项目用到的技术可能还没这几个项目用到的多。 都快2021年了,没有微服务、分布式的项目经验真的有点难了,其次在项目中用到的中间接比如Redis、MQ、Nginx、solr、ElasticSearch、Docker、Dubbo、Kafka、ShardingSphere等等。 从业务梳理到环境配置再到具体模块的代码实现,视频里都讲的都很细致,而且提供源码! 以下项目均为视频版本,包含源码和课堂笔记 项目分别是: 青橙商城完整版 后台+前台+青橙秒杀 Java大型电商系统谷粒商城项目开发实践 淘淘商城 (分布式基于SS M ) 大型微服务项目十次方 【乐优商城】项目(SpringBoot、SpringCloud、Vue) 以上2个项目获取方式 扫描下方二维码,回复 「 项目 」 👆 长按上方二维码 2 秒 回复「 项目 」即可获取实战项目 部分截图大家感受一下。 图片可上下滑动 另外在平时在学习的时候有画思维导图的习惯,一方面加强自己的记忆,另一方面也方便自己复习。 分享一些学习的思维导图,包括具体内容看下图吧!真的是太良心了 完整思维导图获取方式: 1、扫描下方二维码 2、回复关键字: 导图 👆长按上方二维码 2 秒 回复「 导图 」 即可获取资料 本文分享自微信公众号 - Java专栏(finishbug)。 如有侵权,请联系

快速突击 Spring Cloud Gateway

淺唱寂寞╮ 提交于 2020-10-07 05:21:54
认识 Spring Cloud Gateway Spring Cloud Gateway 是一款基于 Spring 5,Project Reactor 以及 Spring Boot 2 构建的 API 网关,是 Spring Cloud 微服务生态的主要组件之一。Spring Cloud Gateway 主要负责接口请求的路由分发,并且支持对请求的安全验证,流量监控和流量控制等扩展操作。另外值得一提的点是,Spring Cloud Gateway 默认采用了非阻塞 I/O 模型实现请求路由的分发。对于处理一些I/O 耗时长的请求上,相比其他一样用 Java 编写采用的同步阻塞I/O 模型的网关性能更高,处理的并发数也更高,避免了因为 I/O 阻塞(网络调用,数据库操作等)导致线程空闲下来,仍能继续处理响应其他请求。 Spring Cloud Gateway 适用场景 作为 API 网关,Spring Cloud Gateway 所提供的功能也很强大,集成了对负载均衡,动态路由,访问控制,限流熔断,埋点监控等功能的支持。如果现有的微服务体系是以 Java 生态甚至 Spring 生态为基础的,那么就十分适合使用 Spring Cloud Gateway 作为 API 应用网关了,让聚合管理多个微服务 API,对外进行统一的输出。 同时秉承 Spring 家族的传统,Spring

第17课:Spring Cloud 实例详解——业务代码实现

若如初见. 提交于 2020-10-07 04:25:26
本文开始,我们将实现具体的业务,由于篇幅问题,本文将贴出部分实例代码,其余会提供一般思路。 公共模块 我们的接口会分别放在不同的工程下,其中会有公共代码,在此我们考虑将公共代码抽象出来放到公共模块 common 下。 Bean 我们提供的接口分为输入参数(request)和输出参数(response),输入参数为客户端请求时传入,输出参数为后端接口返回的数据。我们在定义接口时最好将输入参数和输出参数放到 request 和 response 包下,在定义的 Bean 下抽象出 Base 类来,如下代码: package com.lynn.common.model; public abstract class BaseModel { private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } } package com.lynn.common.model.response; import com.lynn.common.model.BaseModel; public abstract class BaseResponse extends BaseModel{ } package com.lynn.common.model.request; public

第07课:服务消费者

浪尽此生 提交于 2020-10-07 01:33:09
前面我们提到,对外提供接口通过 zuul 服务网关实现。一个大型的系统由多个微服务模块组成,各模块之间不可避免需要进行通信,一般我们可以通过内部接口调用的形式,服务 A 提供一个接口,服务 B 通过 HTTP 请求调用服务 A 的接口,为了简化开发,Spring Cloud 提供了一个基础组件方便不同服务之间的 HTTP 调用,那就是 Feign。 什么是 Feign Feign 是一个声明式的 HTTP 客户端,它简化了 HTTP 客户端的开发。使用 Feign,只需要创建一个接口并注解,就能很轻松的调用各服务提供的 HTTP 接口。Feign 默认集成了 Ribbon,默认实现了负载均衡。 创建 Feign 服务 在根项目上创建一个 module,命名为 feign,然后在 pom.xml 添加如下内容: <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign<

第06课:服务网关

蹲街弑〆低调 提交于 2020-10-06 22:31:45
本文,我们将学习 Spring Cloud的另一个组件:zuul,它提供微服务的网关功能,即中转站,通过它提供的接口,可以转发不同的服务。在学习 zuul 之前,我们先接着上一篇的代码,来看看服务提供者是如何提供服务的。 在服务提供者的 module 下创建 HelloController 类,添加内容如下: @RestController public class HelloController { @RequestMapping("index") public String index(){ return "Hello World!"; } } 然后分别启动服务注册中心和服务提供者,浏览器输入:http://localhost:8762/index,即可看见如下画面: 在实际的项目中,一个项目可能会包含很多个服务,每个服务的端口和 IP 都可能不一样。那么,如果我们以这种形式提供接口给外部调用,代价是非常大的。从安全性上考虑,系统对外提供的接口应该进行合法性校验,防止非法请求,如果按照这种形式,那每个服务都要写一遍校验规则,维护起来也很麻烦。 这个时候,我们需要统一的入口,接口地址全部由该入口进入,而服务只部署在局域网内供这个统一的入口调用,这个入口就是我们通常说的服务网关。 Spring Cloud 给我们提供了这样一个解决方案,那就是 zuul, 来源: oschina

分布式链路追踪技术适⽤场景和技术核⼼思想

我的未来我决定 提交于 2020-10-06 20:51:45
分布式链路追踪技术适⽤场景(问题场景) 场景描述 为了⽀撑⽇益增⻓的庞⼤业务量,我们会使⽤微服务架构设计我们的系统,使得我们的系统不仅能够通过集群部署抵挡流量的冲击,⼜能根据业务进⾏灵活的扩展。 那么,在微服务架构下,⼀次请求少则经过三四次服务调⽤完成,多则跨越⼏⼗个甚⾄是上百个服务节点。那么问题接踵⽽来: 1)如何动态展示服务的调⽤链路?(⽐如A服务调⽤了哪些其他的服务—依赖关系) 2)如何分析服务调⽤链路中的瓶颈节点并对其进⾏调优?(⽐如A—>B—>C,C服务处理时间特别⻓) 3)如何快速进⾏服务链路的故障发现? 这就是分布式链路追踪技术存在的⽬的和意义 分布式链路追踪技术 如果我们在⼀个请求的调⽤处理过程中,在各个链路节点都能够记录下⽇志,并最终将⽇志进⾏集中可视化展示,那么我们想监控调⽤链路中的⼀些指标就有希望了~~~⽐如,请求到达哪个服务实例?请求被处理的状态怎样?处理耗时怎样?这些都能够分析出来了… 分布式环境下基于这种想法实现的监控技术就是就是分布式链路追踪(全链路追踪)。 市场上的分布式链路追踪⽅案 分布式链路追踪技术已然成熟,产品也不少,国内外都有,⽐如 Spring Cloud Sleuth + Twitter Zipkin 阿⾥巴巴的“鹰眼” ⼤众点评的“CAT” 美团的“Mtrace” 京东的“Hydra” 新浪的“Watchman”

第05课:服务注册与发现

微笑、不失礼 提交于 2020-10-06 09:24:35
我们知道,微服务是一个架构思想,而 Spring Cloud 集成了用以实现微服务架构的方方面面。从本文开始,我将带领大家逐个击破 Spring Cloud 的各个模块。 本文,我们先来学习服务的注册与发现,Spring Cloud Netflix 的 Eureka 组件是服务于发现模块,下面我们将学习它。 服务注册与发现模块分为服务注册中心和服务提供者,接下来,我将一一讲解。 服务注册中心 首先,创建一个 Maven 主工程,主工程的 pom.xml 添加如下内容: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version