项目框架

功能模块介绍

Eureka:https://baike.baidu.com/item/Eureka/22402835?fr=aladdin

Ribbon:https://www.jianshu.com/p/1bd66db5dc46

Feign:https://www.jianshu.com/p/8c7b92b4396c

Hystrix:https://www.cnblogs.com/xiong2ge/p/hystrix_faststudy.html

Zuul:https://blog.csdn.net/admin1973/article/details/78740390

搭建服务注册中心-服务端(Eureka)

创建eureka_server项目,选中eureka Server

配置application.yml

启动类添加注解:

搭建服务注册中心-客户端

创建客户端项目,勾选Spring Web和Eureka Discovery client

配置application.yml

客户端不需要在启动类添加注解,因为添加的依赖已经完成了注册

--添加两个客户端,商品客户端和订单客户端

商品客户端:

包含了两个方法,展示所有商品和根据id查找商品

商品对象

商品信息

订单客户端:

订单对象

方法

订单终获取商品信息---见下方Ribbon实现

Ribbon:

使用:启动类终进行添加

实现类:

调用方式一:

调用方式二:

Feign:

启动类添加

订单客户端实现商品客户端(注意name一定要和商品客户端的命名一致)

方法实现类

工具类实现

如果使用了@RequestBody(product的findById),要用PostMapping,

参数用@RequestBody("id") int id来进行调用

Hystrix:

启动类添加

配置application.yml,开启熔断处理,新版本默认不开启

报警机制,在控制器中控制(降级)

熔断处理

dashboard监控仪表盘

配置文件添加

启动类添加

Zuul:

API Gateway ,是系统唯一对外的入口,介于客户端和服务端之间的中间层,处理非业务功能,提供路由请求、鉴权(是否登录等)、监控、缓存、限流等功能

启动类添加:

自定义网关名:

通过网关访问子项目:

权限过滤:(执行逻辑中没有获取到相应的参数时,显示为最后一张图)

共享RequestContext,上下文对象

Zuul过滤器(拦截器):

Zuul限流,产生令牌,如果令牌使用完了则不允许再进行访问,只允许多少人同时在线、访问等

分布式链路追踪系统Sleuth和zipkin

暂时没发现什么作用。只是单纯的控制台输出什么部分

Sleuth:

主要用于日志埋点

在相关的服务中添加依赖(商品、订单)

配置追踪信息

[order-service,96f95a0dd81fe3ab,852ef4cfcdecabf3,false]

第一个值:spring.application.name的值

第二个值:96f95a0dd81fe3ab ,sleuth生成的一个ID,叫Trace ID,用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID(同流水号,串联商品和订单)

第三个值:852ef4cfcdecabf3、spanid 基本的工作单元,获取元数据,如发送一个http

第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。

Zipkin:

结合docker,启动,得到一个可视化端口,访问即可

该项需要电脑结合docker进行使用,不然展示不出来,后续开发学习可以结合视频参考。

Config

统一管理配置,,快速切换各个环境的配置

相关产品:百度的disconf、阿里的diamand

服务端:(config-server)

创建config-server项目,选中config server和eureka client

启动类添加注解

配置文件(服务名称、git存储的配置文件地址和账户信息、注册中心地址)

/{name}-{profiles}.properties

/{name}-{profiles}.yml

/{name}-{profiles}.json

/{label}/{name}-{profiles}.yml

name 服务器名称

profile 环境名称,开发、测试、生产

lable 仓库分支、默认master分支

文件是根据前缀进行匹配的,如下方路径也可以访问

不区分格式的,会进行自动转化。

注意:文件的语法问题不能出错,如果有问题,会出错

超时和分支配置

配置配置中心。Enabled是进行启用,默认不启用,profile是以什么为后缀的文件,label是分支,最好是用分支进行区分

注意:此时运行程序没有错误,但是会发现端口号访问不了,这是由于读取文件的时候出错

将项目文件application.yml改成bootstrap.yml再进行启动即可二访问,这是启动顺序的原因

Spring Cloud Bus

以商品服务为例(暂时只用于读取刷新git仓库中的配置文件)

什么是消息?一个事件,需要广播或者单独传递给某一个接口

为什么使用?配置进行更新了,但是其它系统不知道是否更新

推荐使用RabbitMQ,安装RabbitMQ

添加依赖

添加配置信息:默认已经有该值

这时什么都没有修改

需要在使用的位置添加注解

此时会发现配置中心访问文件已经进行了修改,但是项目读取还没有修改

进行刷新

此时项目读取也有了值,项目也没有重启

只要用到了git中的文件属性,并且后期需要修改,需要在类上方加注解

@RefreshScope

注意启动顺序

1、注册中心

2、配置中心(只有注册成功之后才能启动下方的服务)

3、对应的服务:商品服务、订单服务

4、网关

这时已经设置为优先读取仓库中的文件

 

后续还有关于微服务和docker、redis、云服务器、域名、进行打包发布的操作,由于环境原因,后续没有进行学习(第十二章往后),课程地址

http://i.xue.taobao.com/detail.htm?spm=a2174.7789578.4.3.dpAvAZ&courseId=100442

Spring-微服务的更多相关文章

  1. spring微服务架构-脑图

    spring团队对新一代软件开发的思索.为什么软件开发是spring boot?为什么软件开发是spring cloud?如何使用spring cloud搭建微服务. 清晰脑图查看

  2. spring微服务(顺序由简入难易于理解)

    一.为微服务应用增加健康监控 1.在 build.gradle 文件 dependencies 属性中增加 compile('org.springframework.boot:spring-boot- ...

  3. Java秋招面试复习大纲(二):Spring全家桶+MyBatis+MongDB+微服务

    前言 对于那些想面试高级 Java 岗位的同学来说,除了算法属于比较「天方夜谭」的题目外,剩下针对实际工作的题目就属于真正的本事了,热门技术的细节和难点成为了面试时主要考察的内容. 这里说「天方夜谭」 ...

  4. 翻译-使用Ratpack和Spring Boot打造高性能的JVM微服务应用

    这是我为InfoQ翻译的文章,原文地址:Build High Performance JVM Microservices with Ratpack & Spring Boot,InfoQ上的中 ...

  5. [译]Spring构建微服务

    此文为译文,原文地址 介绍 本文通过一个使用Spring.Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统. 我们可以通过数个微服务组合成一个大型系统. 我们可以想象下 ...

  6. 使用Spring Sleuth和Zipkin跟踪微服务

    随着微服务数量不断增长,需要跟踪一个请求从一个微服务到下一个微服务的传播过程, Spring Cloud Sleuth 正是解决这个问题,它在日志中引入唯一ID,以保证微服务调用之间的一致性,这样你就 ...

  7. 使用spring boot和thrift、zookeeper建立微服务

    Spring cloud适应于云端服务,也适用于企业信息化SOA建设.spring boot也是restful微服务开发的利器.但对于内网服务,即服务与服务之间的调用,spring并没有去刻意封装,也 ...

  8. 综合使用spring cloud技术实现微服务应用

    在之前的章节,我们已经实现了配置服务器.注册服务器.微服务服务端,实现了服务注册与发现.这一章将实现微服务的客户端,以及联调.实现整个spring cloud框架核心应用. 本文属于<7天学会s ...

  9. 【原创】Docker容器及Spring Boot微服务应用

    Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不 ...

  10. 构建微服务:Spring boot

    构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...

随机推荐

  1. 类与 Object 的应用

    # 类与 Object 的应用 + 面试题 类介绍 Java 程序是由若干个类组成的,类也是面向对象编程思想的具体实现. 以下为类的基本使用: public class Cat { // 私有属性 p ...

  2. 基于 Istio 与 Kubernetes 对应用进行灰度发布与 Tracing

    灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式.通俗来说,即让产品的迭代能够按照不同的灰度策略对新版本进行线上环境的测试,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以对新版本进行测试 ...

  3. ROS与激光雷达入门-ROS中使用激光雷达(RPLIDAR)

    激光雷达(RPLIDAR) 我这里用的是思岚(rplidar)A1,通过ros系统去驱动激光雷达,现在做了一个基本的入门. RPLIDAR是低成本的二维雷达解决方案,由SlamTec公司的RoboPe ...

  4. 用JavaScript完成页面自动操作

    在之前的一篇<JavaScript实现按键精灵>中曾记录了几个事件对象,本文将会对它们进行一次实战,要完成的动作包括滚动.点击和翻页. 一.滚动 滚动是通过修改容器元素的scrollTop ...

  5. HTTP协议简单理解

    1.概念: “超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准. 设计HTTP最初的目的是为了 ...

  6. Linq扩展方法获取单个元素

    在使用Linq 提供的扩展方法时,First(OrDefault), Single(OrDefault), Last(OrDefault)都具有返回单个元素的功能.MSDN对这些方法的描述只有功能说明 ...

  7. Educational Codeforces Round 57

    2018.12.28  22:30 看着CF升高的曲线,摸了摸自己的头发,我以为我变强了,直到这一场Edu搞醒了我.. 从即将进入2018年末开始,开启自闭场集合,以纪念(dian)那些丢掉的头发 留 ...

  8. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

  9. Net Core 中WebAPI有关 Session的设置,及获取

    步骤一: 在Startup 文件中做相应的设置 ConfigureServices方法里添加 //ConfigureServices添加: services.AddSession(options =& ...

  10. Go语言实现:【剑指offer】从上往下打印二叉树

    该题目来源于牛客网<剑指offer>专题. 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 不需分层,一维数组. Go语言实现: /** * Definition for a bi ...