版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目4
容器化微服务架构
设计、开发与实施【学习目标】本项目主要学习微服务架构的设计、开发与部署,了解微服务架构的设计思路,掌握使用Eureka框架构建服务注册中心、使用feign框架便捷地调用服务接口、使用Hystrix框架实现容错处理等微服务技术框架,解决单体应用架构可靠性差、扩展能力受限等问题;了解系统容器化的部署方式,掌握使用Docker镜像制作与部署各个服务,解决系统快速部署的问题。【项目介绍】将项目四的餐厅点餐系统使用微服务架构的设计思路进行改造升级,基于主流的微服务开发框架SpringCloud,结合常用的技术框架实现服务的注册与管理、服务之间的调用、熔断处理以及系统的容器化部署。【知识结构】任务1.设计划分微服务任务描述按照微服务架构重新设计餐厅点餐系统,按照该系统的特定功能拆分出独立的服务以及定义这些服务需要提供的接口服务。知识准备1.微服务架构介绍:微服务架构是一种架构模式,它把应用程序功能分解为一组小的服务为用户提供最终价值,服务之间互相协调、互相配合,经常采用HTTP资源API这样轻量的机制来相互通信,这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。简单说微服务架构是一种架构风格,可为应用程序提供更高的可维护性、可测试性和可部署性。2.服务是什么:服务就是一个单一的、可独立部署的软件组件,它实现了一些有用的功能,服务具有接口,为其客户端提供对功能的访问,比如用户服务。3.微服务架构特点:1)由完成特定功能的小服务组成,把一个系统拆分成多个模块,每个模块又可以细分多个微服务,每个服务都可独立的并且支持多节点部署,运行在独立的进程中。2)去中心化的服务治理,每个微服务允许使用不同的技术来开发,且数据可以不再单独的保存在一个数据库中,允许多种数据库技术。3)高内聚低耦合的设计,组成各个应用的微服务,都要尽可能地实现“高内聚和低耦合”的目标,每个微服务都拥有自己的领域边界和完整的业务逻辑。4)容错设计和弹性设计,当服务发生故障时,能够快速地试错,能够快速地检测出故障,而且能够在一定的情况下自动恢复。5)自动化运维,基础设施例如服务器、数据库、中间件等能够弹性且自动化分配资源,微服务迭代构建要能够满足自动化的提交版本、自动化代码检查、自动化测试、自动化部署以及监控等。4.微服务的设计步骤:1)定义系统操作,将应用程序的需求提炼为各种关键请求;2)定义服务,将系统拆分为多个小服务;3)定义服务接口,确定每个服务的接口,将1)中的关键请求分配给到各个服务接口。5.微服务的拆分设计方法:决定如何把系统分解为一组服务就是微服务架构的关键,常见的服务拆分模式有以下两种模式:1)根据业务能力分解模式,围绕业务功能组织服务;2)根据子域分解模式,子域围绕领域驱动设计来组织服务。任务实施步骤1:定义系统操作操作者用户故事请求接口描述管理员、服务员、后厨人员用户登录/login
用户验证并授权访问资源服务员菜品列表/getdishesbypage获取菜品列表服务员设定桌号/settableid设定点餐的餐桌号服务员点餐提交/addcart/commitcart提交点餐服务员订单列表/getpaylist/requestpay获取待支付列表后厨人员菜品烹饪管理/getrtdishes/dishesdone/getrtorder"通过按钮确定对应菜品的烹制状态(准备烹制、正在烹制、烹制完毕)管理员用户管理/adduser/modifyuser/deleteuser/getonlinekitchen/getonlinewaiters/getuserbypage用户的增删改查功能管理员菜品管理/adddishes/modifydishes/deletedishes/getdishesbypage菜品的增删改查功能根据用户故事识别系统必须处理的各种请求,识别出应用程序的核心系统操作,见表5-1。表5-1用户故事接口表步骤2:定义服务使用业务服务能力进行业务拆分,然后从业务能力定义出服务。订餐系统的核心业务能力如下:1)用户管理,管理服务员和后厨人员的操作流程和权限;2)菜品管理,管理菜品的添加、修改和删除;3)订单管理,管理从点餐、确认菜品订单到完成订单的全过程;1)菜品烹制管理,管理菜品烹制状态。根据核心业务定义服务,对应列表见表5-2。核心业务能力服务用户管理UserService菜品管理DishService订单管理OrderService菜品烹制管理表5-2核心业务服务对应表步骤3:定义服务接口定义了系统操作列表和服务列表之后,下一步就是定义每个服务的接口,该接口可以由外部客户端调用,也可以有其他服务调用。定义UserService的服务接口,见表5-3。接口功能HTTP请求方式URL地址支持格式获取用户列表GET/getuserbypageJSON新增用户数据POST/adduserJSON修改用户数据POST/adminmodifyuserJSON删除用户数据GET/deleteuserJSON表5-3服务接口表知识小结【对应证书技能】1)掌握微服务的常规设计步骤:定义系统操作、定义服务以及定义服务接口。根据用户需求识别系统必须处理的各种请求来定义系统的操作,然后根据业务能力分解模式,围绕业务功能组织服务,形成UserService、DishService和OrderService三个服务,最后将系统操作对用到服务的接口。2)基于RestfulAPI规范设计服务的接口,满足系统操作的需求。本任务知识技能点与等级证书技能的对应关系见表5-4。任务1知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级软件服务接口设计原则使RestfulAPI规范设计服务的接口2.软件后端设计2.3服务接口设计2.3.1了解软件服务接口设计原则;2.3.2掌握RestfulAPI接口的作用与规范;高级表5-4任务1知识技能点与等级证书技能对应拓展练习完成DishService和OrderService服务的接口设计列表。谢谢观看任务2.搭建服务注册与发现中心任务描述EurekaServer用于微服务架构下的服务注册和发现,本任务就是使用EurekaServer搭建服务注册与发现中心。知识准备在微服务架构中,会拆分多个“小服务”,这些“小服务”往往都有提供接口,调用接口的功能,这些“小服务”之间的调用需要服务发现和注册中心进行维护,Eureka是Netflix中的一个开源框架,用于服务注册和发现。Spring-CloudEuraka是SpringCloud是对Euraka的集成,实现微服务的注册与发现。Eureka包含EurekaServer和EurekaClient两部分。为了便于理解,将Eurekaclient再分为ServiceProvider和ServiceConsumer,下面是各部分的作用:1)EurekaServer,提供服务的注册与发现;2)ServiceProvider,服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到;3)ServiceConsumer,服务消费方,从Eureka获取注册服务列表,从而能够消费服务。任务实施步骤1:创建项目1)使用SpringStarterProject创建项目,单击选择“File->New->Project”,在弹出的“NewProject”窗口选择“SrpingBoot->SpringStarterProject”,单击“Next”按钮,过程如图
5-1所示:图5-1创建项目-12)在“NewSpringStarterProject”窗口,设置Name为“ordersys_eurekaserver”,Group为“com.chinasofti”,JavaVersion为“8”,Package为“com.chinasofti.ordersys_eurekaserver”,单击“Next”按钮,过程如图5-2所示:图5-2创建项目-23)在“NewSpringStarterProjectDependencies”窗口,单击选择“SpringCloudDiscovery->EurekaServer”和“Web->SpringWeb”,单击“Finish”按钮,过程如图
5-3所示:图5-3创建项目-3步骤2:在启动类上添加@EnableEurekaServer,使该项目作为注册中心。@EnableEurekaServer@SpringBootApplicationpublicclassOrdersysEurekaserverApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysEurekaserverApplication.class,args); }}步骤3:配置Eureka注册中心参数。1)将“resources”目录下的“application.properties”文件改名为“application.yml”。2)配置“application.yml”文件,通过配置registerWithEureka和fetchRegistry为false来表明该服务是eurekaserver。server:port:8761eureka:instance:hostname:localhostclient:#声明自己是个服务端registerWithEureka:falsefetchRegistry:falseserviceUrl:defaultZone:http://${eureka.instance.hostname}:${server.port}/eureka/server:enable-self-preservation:false步骤4:启动&访问注册中心页面1)启动注册中心,选择启动类“OrdersysEurekaserverApplication”,右键单击选择“RunAs->SpringBootApp”,过程如图
5-4所示:图5-4启动注册中心2)访问注册中心,打开浏览器,在地址栏中输入“http://localhost:8761/”,结果如图5-5所示:图5-5访问注册中心知识小结【对应证书技能】使用Spring-CloudEuraka搭建服务注册与发现中心步骤简单,主要是下面三个步骤:使用SpringBoot快速构建项目,注意要导入“SpringCloudDiscovery->EurekaServer”依赖;在启动类上添加@EnableEurekaServer,启动注册中心;配置“application.yml”文件设置注册中心的参数。本任务知识技能点与等级证书技能的对应关系见表5-5。任务2知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级服务注册与发现中心使用Euraka框架搭建服务注册与发现中心3.高性能系统开发3.3Java微服务开发与部署3.3.4熟练掌握Eruka/Consul服务注册与发现中心的部署于配置;高级表5-5任务2知识技能点与等级证书技能对应谢谢观看任务3.实现菜品服务的设计与开发任务描述
本任务就是使用EurekaClient构建菜品服务并将服务注册到注册中心。知识准备EurekaClient(服务提供者)EurekaClient用于将服务注册到注册中心,EurekaServer会将注册信息向其他EurekaServer进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。任务实施步骤1:创建菜品服务项目参考任务2创建项目“ordersys_dishservice”,选择该项目的依赖“SpringCloudDiscovery->EurekaDiscoveryClient”、“Web->SpringWeb”和“SpringCloudRouting->OpenFeign”,创建项目,如图
5-6所示:图5-6创建项目步骤2:在启动类上添加@EnableEurekaClient,使该项目作为服务提供者。@EnableEurekaClient@SpringBootApplicationpublicclassOrdersysDishserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysDishserviceApplication.class,args); }}步骤3:配置服务提供者参数1)将“resources”目录下的“application.properties”文件改名为“application.yml”。2)配置“application.yml”文件,配置“defaultZone:http://localhost:8761/eureka/”指向注册中心,“name:dishService”指定dishService为服务名字,用于对外提供服务名。server:port:8771#指向注册中心地址eureka:client:serviceUrl:defaultZone:http://localhost:8761/eureka/#服务名称,建议驼峰命名spring:application:name:dishService步骤5:引入项目四的菜品代码1)引入JAVA项目代码,根据提供的项目代码复制到DishService项目,结果如图5-8所示:图5-8菜品代码目录2)配置“pom.xml”,引入Mybatis框架和MySQL驱动,代码如下:<!--mybatis--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version></dependency>
<!--数据库驱动--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.15</version></dependency>3)配置“application.yml”,#服务名称,建议驼峰命名spring:application:name:dishServiceprofiles:active:dev#热编译devtools:restart:#需要实时更新的目录additional-paths:resources/**,static/**,templates/**datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://34:3306/ordersys-v3?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=UTCusername:rootpassword:Apj123@pjplatform:mysqlmybatis:#指定实体类存放的包路径type-aliases-package:com.chinasofti.ordersys_dishservice.model#指定mapper.xml文件的位置为/mybatis-mappers/下的所有xml文件mapper-locations:classpath:/mybatis-mappers/*#转换到驼峰命名configuration:mapUnderscoreToCamelCase:true步骤6:验证服务接口1)按顺序分别运行注册中心和菜品服务。2)打开Postman,在地址栏中输入“http://localhost:8771/admin/dishes/toprecommend”,可以看到获取头4条推荐菜品信息,结果如图5-9所示:图5-9验证菜品服务知识小结【对应证书技能】使用Spring-CloudEurakaClient搭建服务并注册到注册中心,主要是下面三个步骤:1)使用SpringBoot快速构建项目,注意要导入“SpringCloudDiscovery->EurekaServer”依赖;2)在启动类上添加@EnableEurekaServer,启动注册中心;3)配置“application.yml”文件设置注册中心的参数。本任务知识技能点与等级证书技能的对应关系见表5-6。
任务2知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级构建服务提供者使用EurakaClient构建服务并注册到注册中心3.高性能系统开发3.3Java微服务开发与部署3.3.4熟练掌握Eruka/Consul服务注册与发现中心的部署于配置;高级表5-6任务3知识技能点与等级证书技能对应拓展练习按照任务3的步骤构建用户服务并注册到注册中心。谢谢观看任务4.实现订单服务设计与开发任务描述本任务是开发订单服务并将服务注册到注册中心,同时通过Feign框架提供订单服务作为服务消费者去调用菜单服务的能力。知识准备1)Feign(服务消费者)Feign是springcloud中服务消费端的调用框架,Feign是一个声明式、模板化的HTTP客户端,可帮助更加便捷、优雅的调用接口。在SpringCloud中,使用Feign创建一个接口并对它进行注解,编码就完成了。它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,SpringCloud对Feign做了增强,使Feign支持SpringMVC的注解,并集成Ribbon和Eureka,使用Feign使用非常方便。2)Hystix(熔断器)Hystrix是Netflix开源的一款容错框架,同样具有自我保护能力,Hystix是一个远程过程调用的代理,在连续失败次数超过指定阈值后的一段时间内,这个代理会立即拒绝其他调用。3)服务故障的“雪崩”效应为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应,Hystrix用于解决服务故障的“雪崩”效应这个问题。任务实施步骤1:创建订单服务1)参考任务3创建项目“ordersys_orderservice”,其中依赖包与任务3完全相同。2)在启动类上添加@EnableEurekaClient,使该项目作为服务提供者。@EnableEurekaClient@SpringBootApplicationpublicclassOrdersysOrderserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysOrderserviceApplication.class,args); }}3)修改并配置“application.yml”文件。server:port:8772#指向注册中心地址eureka:client:serviceUrl:defaultZone:http://localhost:8761/eureka/#服务名称,建议驼峰命名spring:application:name:orderService步骤2:验证订单服务是否注册1)按顺序分别运行启动文件,启动注册中心、菜品服务和订单服务。2)访问注册中心,打开浏览器,在地址栏中输入“http://localhost:8761/”,可以看到dishService和orderService服务已经在注册中心中,结果如图5-10所示:图5-10注册中心的订单服务步骤3:引入项目四中的订单相关代码参考任务3的步骤,根据提供的代码引入订单代码到项目。步骤4:服务间调用在项目实际应用中,往往需要服务之间相互调用,如在点餐系统中,订单服务根据菜品的ID获取菜品详情,微服务框架中常常使用Feign框架来实现服务之间的调用通信。1)在菜品服务中增加获取菜品详情接口,在“ordersys_dishservice”项目的“AdminDishesController”类中增加getDishesForApi()方法,其中对外接口URL为“/admin/dishes/api/get”,使用@RequestParam将请求参数“dishesId”绑定到方法参数上,代码如下:@GetMapping("/api/get")publicResults<DishesInfo>getDishesForApi(@RequestParam(value="dishesId")IntegerdishesId){ returnResults.success(service.getDishesById(dishesId));}2)在订单服务中启用Feign客户端,启动类“OrdersysOrderserviceApplication”中增加@EnableFeignClients注解,开启SpringCloudFeign的支持功能,代码如下:@EnableEurekaClient@EnableFeignClients@SpringBootApplicationpublicclassOrdersysOrderserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysOrderserviceApplication.class,args); }}3)在订单服务中定义DishFeignClient访问菜品服务,在“service”包下增加DishFeignClient接口,使用@FeignClient注解指定服务名“dishservice”来绑定菜单服务,然后再使用@GetMapping("/admin/dishes/api/get")注解来绑定具体菜单服务提供的REST接口,@RequestParam绑定参数,注意一定要和菜品服务中的getDishesForApi()方法的参数保持一致。@FeignClient(name="dishservice")publicinterfaceDishFeignClient{ @GetMapping("/admin/dishes/api/get") Results<DishesInfo>findAllOrders(@RequestParam(value="dishesId")intid);}4)在“OrderController”下引入DishFeignClient,增加getDishesForApi()方法,通过调用findAllOrders()来获取菜品数据。@AutowiredprivateDishFeignClientdishFeignClient;
@GetMapping("/api/get")publicResults<DishesInfo>getDishesForApi(@RequestParam(value="dishesId")IntegerdishesId){ returndishFeignClient.findAllOrders(dishesId);}5)验证服务之间的调用通信。按顺序分别运行注册中心、菜品服务和订单服务,打开Postman,在地址栏中输入“http://localhost:8772/order/api/get?dishesId=1”,可以看到订单服务通过调用菜品服务获取菜品信息,结果如图5-11所示:图5-11验证订单服务步骤5:服务熔断处理在微服务架构的点餐系统中,订单服务请求菜品服务,如果菜品服务出现故障,会导致连锁故障。当对特定的服务的调用的不可用且达到一个阀值,如Hystrix是5秒20次,断路器将会被打开。1)在“pom.xml”文件中增加Hystrix依赖,代码如下:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.2.8.RELEASE</version></dependency>2)开启feign支持熔断处理,修改订单服务的“application.yml”文件,开启hystrix,代码如下:feign:circuitbreaker:enabled:true3)在启动类上添加@EnableCircuitBreaker注解,代码如下:@EnableCircuitBreaker@EnableEurekaClient@EnableFeignClients@SpringBootApplicationpublicclassOrdersysOrderserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysOrderserviceApplication.class,args); }}4)增加配置熔断处理类,在DishFeignClient接口的注解中加上fallback的指定类“DishFeignClientFallback”用于实现断路器,Fallback相当于是降级操作.对于查询操作,实现一个fallback方法,当请求菜品服务出现异常的时候,可以使用fallback方法返回的值,fallback方法的返回值一般是设置的默认值或者直接返回错误,代码如下:@FeignClient(name="dishservice",fallback=DishFeignClientFallback.class)publicinterfaceDishFeignClient{ @GetMapping("/admin/dishes/api/get") Results<DishesInfo>findAllOrders(@RequestParam(value="dishesId")intid);}5)实现熔断处理类,“service”包下增加DishFeignClientFallback实现DishFeignClient接口,直接返回错误,代码如下:publicclassDishFeignClientFallbackimplementsDishFeignClient{ @Override publicResults<DishesInfo>findAllOrders(intid){ System.out.println("降级处理!"); circuitbreakerreturnResults.failure(10001,"抱歉,菜品服务走失了..."); }}知识小结【对应证书技能】在微服务架构中,多个服务之间使用Feign框架实现服务间的通信,Feign是一个声明式的伪Http客户端,使用Feign,仅需要创建一个接口并通过@FeignClient注解绑定调用目标服务即可调用该服务;在服务与服务之间相互调用时,Hystrix框架用于如果服务出现故障时提供熔断功能,通过fallback方法可以直接返回一个固定值,避免连锁故障拖垮服务。本任务知识技能点与等级证书技能的对应关系见表5-7。任务2知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级服务间调用;服务断路器和熔断处理;
使用SpringCloudHystrix实现服务熔断;使用SpringCloudFeign实现服务间的调用;3.高性能系统开发3.3Java微服务开发与部署3.3.7能够基于SpringCloud实现服务断路器和熔断处理;高级表5-7任务4知识技能点与等级证书技能对应谢谢观看任务5.构建Gateway网关路由服务任务描述本任务就是使用SpringCloudGateway框架构建网关服务,接收并转发所有的客户端调用。知识准备1)网关服务通常在项目中为了简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度,具体作用就是转发服务,接收并转发所有内外部的客户端调用,网关其他常见的功能还有权限认证,限流控制,日志输出等等。2)SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。SpringCloudGateway不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。3)SpringCloudGateway的核心概念路由(Route):路由是网关最基础的部分,路由信息由ID、目标URI、一组断言和一组过滤器组成。如果断言路由为真,则说明请求的URI和配置匹配。断言(Predicate):Java8中的断言函数。SpringCloudGateway中的断言函数输入类型是Spring5.0框架中的ServerWebExchange。SpringCloudGateway中的断言函数允许开发者去定义匹配来自于HttpRequest中的任何信息,比如请求头和参数等。过滤器(Filter):一个标准的SpringWebFilter。SpringCloudGateway中的Filter分为两种类型,分别是GatewayFilter和GlobalFilter。过滤器将会对请求和响应进行处理。任务实施步骤1:创建网关服务1)参考任务2创建项目“ordersys_gateway”,选择该项目的依赖“SpringCloudDiscovery->EurekaDiscoveryClient”和“SpringCloudRouting->Gateway”,创建项目,如图5-13所示:图5-13创建网关服务2)在启动类上添加@EnableEurekaClient,使该项目作为服务提供者。@EnableEurekaClient@SpringBootApplicationpublicclassOrdersysGatewayApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysGatewayApplication.class,args); }}3)修改并配置“application.yml”文件,设置服务端口8762以及向注册中心注册。server:port:8762#指向注册中心地址eureka:client:serviceUrl:defaultZone:http://localhost:8761/eureka/#服务名称,建议驼峰命名spring:application:name:gateway步骤2:自定义配置路由规则1)修改“application.yml”文件,增加“cloud:gateway:routes”配置,字段配置作用如下:id:设置自定义的路由ID,保持唯一,名字为“dishservice-route”;uri:设置跳转到目标服务地址,此处设置为“lb://dishservice”,对应格式为“lb://服务注册名字”,意为使用的协议为“lb”,服务注册名字为“dishservice”,Gateway将使用LoadBalancerClient通过eureka解析为实际的主机和端口,并进行负载均衡访问。predicates:设置路由跳转条件,Predicate接受一个输入参数,返回一个布尔值结果,设置“Path=/api/dishservice/**”,意为当访问路径包含“/api/dishservice/”时,跳转到uri配置的“dishservice”服务。filters:设置过滤器规则,StripPrefix参数表示在将请求发送到下游服务之前从请求中剥离的路径个数,设置StripPrefix=2,意为当通过Gateway网关向“/api/dishservice/admin/dishes/toprecommend”发出请求时,转发到服务的实际请求为“/admin/dishes/toprecommend”。详细代码如下:#服务名称,建议驼峰命名spring:application:name:gatewaycloud:gateway:routes:-id:dishservice-routeuri:lb://dishservicepredicates:-Path=/api/dishservice/**filters:-StripPrefix=22)按顺序分别运行注册中心、菜品服务、订单服务和网关服务,打开Postman,在地址栏中输入“http://localhost:8762/api/dishservice/admin/dishes/toprecommend”,可以看到访问网关服务后跳转到菜品服务,结果如图5-14所示:图5-14验证网关路由功能步骤3:自动配置路由规则步骤2中实现了手动配置路由转发规则,实现转发到菜品服务的功能,微服务架构中服务较多,可以使用自动配置的方式代替手动配置的方式实现全部服务的转发功能。1)修改“application.yml”文件,增加“cloud:gateway:routes:discovery:locator”配置,字段配置作用如下:enabled:设置为true,表明gateway开启服务注册和发现的功能,并且springcloudgateway自动根据服务发现为每一个服务创建了一个路由router,这个router将以服务名开头的请求路径转发到对应的服务。lowerCaseServiceId:设置为true,表明将请求路径上的服务名配置为小写,注册中心注册时将服务名默认是大写。详细代码如下:#服务名称,建议驼峰命名spring:application:name:gatewaycloud:gateway:discovery:locator:enabled:truelowerCaseServiceId:true2)按顺序分别运行注册中心、菜品服务、订单服务和网关服务,打开Postman,在地址栏中输入“http://localhost:8762/dishservice/admin/dishes/toprecommend”,可以看到访问网关服务后根据服务名跳转到菜品服务,结果如图5-15所示:图5-15验证网关路由功能知识小结【对应证书技能】使用SpringCloudGateway构建网关服务,提供核心的路由功能,为微服务架构提供统一的API路由管理方式,通过配置路由信息ID、目标URI、断言Predicate和过滤器Filter实现路由根据匹配规则转发请求。本任务知识技能点与等级证书技能的对应关系见表5-8。任务2知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级构建网关服务使用SpringCloudGateway框架构建网关服务3.高性能系统开发3.3Java微服务开发与部署3.3.6能够基于SpringCloudGateway实现网关转发与请求过滤;高级表5-8任务5知识技能点与等级证书技能对应谢谢观看任务6.实现链路追踪功能任务描述本任务是使⽤Zipkin和Sleuth框架实现业务分析调⽤链路追踪系统,用于分析微服务架构的服务接口问题分析、性能诊断等问题。知识准备1)Sleuth框架在微服务框架中,一个由客户端发起的请求在后端系统中会经过不同的服务节点调用来协同产生的最后的请求结果,每一个前端请求都会形成一条复杂的分布式调用链路,链路中的任何一个环节出现高延时或错误都会引起整个请求的失败。SpringCloudSleuth为SpringCloud实现了分布式跟踪解决方案,且兼容Zipkin,结合Zipkin做链路跟踪。Sleuth是一个工具,能跟踪一个用户请求的过程,捕获到跟踪数据,构建微服务的整个调用链的视图,它是调试和监控微服务的关键工具,可以快速发现错误根源以及监控分析每条请求链路上的性能。2)Zipkin框架Zipkin是一个可视化的分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时序数据。Zipkin最初是为了在Cassandra上存储数据而构建的,因为Cassandra是可扩展的,具有灵活的模式,并且在Twitter中大量使用。除了支持Cassandra,还支持ElasticSearch和MySQL。如果日志文件中有跟踪ID,则可以直接跳至该跟踪ID。还可以基于属性进行查询,例如服务,操作名称,标签和持续时间,服务中花费的时间百分比以及操作是否失败。任务实施步骤1:增加Sleuth链路追踪功能1)在各个微服务项目的“pom.xml”文件添加sleuth依赖,<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId></dependency>2)启动全部服务,打开Postman,在地址栏中输入“http://localhost:8762/orderservice/order/api/get?dishesId=1”,通过订单服务调用菜单服务,打开STS的“Console”分析Sleuth日志的结果,如图5-16所示:图5-16Sleuth日志功能可以看到Sleuth在日志中增加“[dishservice,8fa6395f7b567ced,42502fd383b15965]”信息用于日志追踪,分析如下:第一个值:服务名,对应的是的值;第二个值:TraceID,用来标识一条请求链路,一条请求链路中包含一个TraceID;第三个值:SpanID,基本的工作单元,获取元数据。步骤2:构建Zipkin服务端通过Sleuth框架收集到日志链路信息,并不方便开发人员查看分析,通过引入Zipkin框架来实现链路追踪的可视化WEB界面分析调用链路耗时等情况。1)启动Zipkin服务端,下载提供的“zipkin-server-2.12.9-exec.jar”文件,执行“java-jarzipkin-server-2.12.9-exec.jar”命令,启动Zipkin服务端,打开浏览器访问“:9411/”,结果如图
5-17所示:图5-17Zipkin服务步骤3:服务中增加Zipkin客户端在网关服务、菜品服务和订单服务的“pom.xml”文件中添加Zipkin依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId></dependency>步骤4:配置Zipkin服务端地址在网关服务、菜品服务和订单服务的“application.yml”文件中配置zipkin和sleuth,注意与application是同层级,通过“zipkin:base-url”设置指向Zipkin服务端地址和“sleuth:sampler:probability”设置采样百分比,设为1代表100%采样,即记录全部的sleuth信息。#服务名称,建议驼峰命名spring:application:name:dishservicezipkin:base-url::9411/discovery-client-enabled:falsesleuth:sampler:probability:1.0步骤5:验证可视化的链路追踪系统1)启动全部服务,打开Postman,在地址栏中输入“http://localhost:8762/orderservice/order/api/get?dishesId=1”。2)在浏览器中访问“:9411/”查看链路追踪系统,可以看到调用的服务名,结果如图5-18所示:图5-18查看链路追踪系统图
5-19查看链路耗时3)选择“orderservice”服务,单击“查询”按钮,可以看到链路耗时情况,结果如下图5-19所示:3)选择“orderservice”服务,单击“查询”按钮,可以看到链路耗时情况,结果如下图5-19所示:图5-20查看链路详情知识小结【对应证书技能】微服务架构系统服务之间调用很多次后端服务才能完成特定功能,当整个请求变慢或不可用时,很难得知该请求是由哪个后端服务引起的,这时就需要解决如何快读定位服务故障点,本任务就是使用Sleuth结合Zipkin构建调⽤链路追踪功能,可以很方便的理清服务间的调用关系,看出每个采样请求的耗时,分析出哪些服务调用比较耗时,然后优化链路。本任务知识技能点与等级证书技能的对应关系见表5-9。任务2知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级开发服务间调用的分析追踪系统;使用Sleuth结合Zipkin构建链路追踪系统,分析服务提供者与消费者链路;3.高性能系统开发3.3Java微服务开发与部署3.3.5能够基于Eruka/Consul服务注册与发现中心开发实现服务提供者与消费者;高级表5-9任务6知识技能点与等级证书技能对应谢谢观看任务7.完成各个服务的Docker打包任务描述本任务是将注册中心、网关、菜品和订单服务使用Docker容器打包,以方便实现快速部署。知识准备1)docker-maven-plugin插件在项目打包发布的持续集成过程中,项目常常使用Maven框架进行编译打包,并生成镜像,通过镜像部署上线,可以极大提升系统上线效率,同时能够快速动态扩容,快速回滚等需求。Spotify公司开发的docker-maven-plugin插件就是通过简单的配置,在Maven工程中自动生成镜像并推送到Docker仓库中。任务实施步骤1:配置远程连接Docker服务1)打开STS工具,菜单栏单击选择“Window->ShowView->Other->Docker->DockerExplore”,单击“open”按钮打开Docker视图,在该视图下单击建立DockerConnection,输入已开启远程连接的Docker服务端地址(项目四中使用的Docker服务),单击“Finish”按钮,结果如图5-21所示:图5-21配置Docker连接2)连接成功,可以看到当前Dockerserver中已有镜像和容器,结果如图5-22所示:图5-22DockerExplore视图步骤2:构建服务注册中心的Docker镜像1)修改服务注册中心的“pom.xml”文件,增加Spotify的docker-maven-plugin插件,提供使用maven插件构建docker镜像的功能。<build><finalName>eurekaserver</finalName><plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin></plugins></build>2)在项目根目录下,创建用来构建镜像的Dockerfile文件,编写命令如下:###基础镜像,使用alpine操作系统,openjkd使用8u201FROMopenjdk:8u201-jdk-alpine3.9#系统编码ENVLANG=C.UTF-8LC_ALL=C.UTF-8#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹VOLUME/tmp#构建成功的jar文件复制到镜像内,名字改成app.jarADDtarget/eurekaserver.jarapp.jar#启动容器时的进程ENTRYPOINT["java","-jar","/app.jar"]#暴露镜像端⼝EXPOSE87613)使用Maven打包服务注册中心,右击“ordersys_eurekaserver”项目,选择“RunAs->MavenInstall”,构建成功之后,可以看到“target”目录下生成eurekaserver.jar文件,结果如图5-23所示:图5-23Maven打包服务注册中心4)单击“启动”按钮后的三角号,选择“RunConfiguration...”,如下图5-24所示:图5-24RunConfiguration过程5)选择“BuildDockerImage”,右击选择“NewConfiguration”,过程如图5-25所示:图5-25BuildDockerImage6)配置构建Docker镜像的服务端,其中Name为“eurekaserver”,DockerConnection选择步骤一中配置的docker服务端“docker云”,BuildContextPath选择“\ordersys_eurekaserver”目录,Repositoryname设置为“ordersys_eurekaserver”,Dockerfilename设置为前面创建的“Dockerfile”文件,过程如图5-26所示:图5-26配置服务注册中心构建参数7)单击“Run”按钮,显示构建成功,运行结果如下图所示:8)单击选择“DockerExplorer”视图,可以看到“ordersys_eurekaserver”镜像被成功创建,结果如图5-27所示:图5-27服务注册中心镜像上传至仓库步骤3:构建菜品服务的Docker镜像1)修改菜品服务的“pom.xml”文件,增加Spotify的docker-maven-plugin插件,代码如下:<build><finalName>dishservice</finalName><plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin></plugins></build>2)修改菜品服务的“application.yml”文件,修改注册中心指向DockerServer容器:#指向注册中心地址eureka:client:serviceUrl:defaultZone:31:8761/eureka/3)在项目根目录下,创建用来构建镜像的Dockerfile文件,编写命令如下:###基础镜像,使用alpine操作系统,openjkd使用8u201FROMopenjdk:8u201-jdk-alpine3.9#系统编码ENVLANG=C.UTF-8LC_ALL=C.UTF-8#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹VOLUME/tmp#构建成功的jar文件复制到镜像内,名字改成app.jarADDtarget/dishservice.jarapp.jar#启动容器时的进程ENTRYPOINT["java","-jar","/app.jar"]#暴露镜像端⼝EXPOSE87714)使用Maven打包菜品服务,右击“ordersys_dishservice”项目,选择“RunAs->MavenInstall”,构建成功之后,可以看到“target”目录下生成dishservice.jar文件,结果如图5-28所示:图5-28Maven打包菜品服务5)配置构建Docker镜像的服务端,其中Name为“dishservice”,DockerConnection选择步骤一中配置的docker服务端“docker云”,BuildContextPath选择“\ordersys_eurekaserver”目录,Repositoryname设置为“ordersys_dishservice”,Dockerfilename设置为前面创建的“Dockerfile”文件,过程如图5-29所示:图5-29配置菜品服务构建参数6)单击“Run”按钮,运行完成后选择“DockerExplorer”视图,可以看到“ordersys_dishservice”镜像被成功创建,结果如图5-30所示:图5-30菜品镜像上传至仓库拓展练习构建其他服务的Docker镜像参照步骤三,分别构建订单服务和网关服务的Docker镜像。知识小结【对应证书技能】使用Spotify公司开发的docker-maven-plugin插件将SpringBoot项目自动构建Docker镜像,使用该插件构建Docker镜像,需要有一个安装好的Docker运行环境,本案例中使用的CentOS系统下安装的Docker服务,构建镜像的核心任务分为三个步骤:1)在pom.xml中引入dockerfile-maven-plugin插件,并配置该插件;2)编写Dockerfile文件;3)构建Docker镜像并推送到Docker仓库中。本任务知识技能点与等级证书技能的对应关系见表5-10。任务2知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级JAVA项目构建Docker镜像将SpringBoot项目构建成Docker镜像1.容器管理1.2容器镜像制作1.2.1能使用Dockerfile来定制一个构建镜像;高级表5-10任务7知识技能点与等级证书技能对应谢谢观看任务8.完成系统的容器化部署任务描述本任务是将链路追踪系统、服务注册中心、网关、菜品和订单服务实现容器化部署。知识准备1.容器化部署技术容器化部署是指将应用整合到容器中并且运行起来的这个过程,容器能够简化应用的构建、部署和运行过程。这个过程简单地说,就是将Java项目和依赖包打成一个带有操作指令的镜像文件,然后在服务器创建一个容器,让镜像在容器内运行,从而实现项目的部署。
针对SpringBoot项目的容器化部署过程主要有以下几个步骤:(1)项目创建Dockerfile文件;(2)打包并构建项目的Docker镜像;(3)将项目镜像上传到Docker仓库;(4)使用Dockerrun命令运行项目容器完成部署;任务实施步骤1:使用Docker容器部署Zipkin服务端1)使用Putty登录到CentOS服务器,执行命令“dockerpullopenzipkin/zipkin:latest”拉取Zipkin镜像,结果如图5-31所示:图5-31拉取Zipkin镜像2)执行“dockerimages”命令查看镜像,结果如图5-32所示:图5-32拉取Zipkin镜像3)执行“dockerrun--nameordersys-zipkin-d-p9411:94119b4acc3eb019”命令启动Zipkin服务器,其中“dockerrun--nameordersys-zipkin-d-p9411:94119b4acc3eb019”是上面查询到的zipkin的镜像ID,另外如果使用的是华为云等云服务器,记得配置网络安全组开放9411端口,结果如图5-33所示:图5-33运行Zipkin容器4)访问Zipkin,打开浏览器访问“http://公⽹ip:9411/zipkin/”,结果如图5-34所示:图5-34访问Zipkin5)修改全部服务的“application.yml”文件,将zipkin服务端地址指向“31:9411/zipkin/”,否则无法实现链路追踪。zipkin:base-url:31:9411/步骤2:使用Docker容器部署服务中心1)执行“dockerimages”命令查看镜像,结果如图5-35所示:图5-35查看镜像2)执行“dockerrun--nameordersys_eurekaserver-d-p8761:8761916ccf8e36b1”命令启动服务注册中心,结果如图5-36所示:图5-36启动服务注册中心3)打开浏览器访问“31:8761/”,结果如图5-37所示:图5-37查看服务注册中心4)修改全部服务的“application.yml”文件,将注册中心地址指向“31:8761/eureka/”,然后重新构建镜像。#指向注册中心地址eureka:client:serviceUrl:defaultZone:31:8761/eureka/instance:
#以IP地址注册到服务中心,相互注册使用IP地址prefer-ip-address:true步骤3:使用Docker容器部署菜品服务1)执行“dockerimages”命令查看镜像,结果如图5-38所示:图5-38查看镜像2)执行“dockerrun--nameordersys_dishservice-d-p8771:8771e8a1063ddf23”命令启动菜品服务,其中e8a1063ddf23为ordersys_dishservice的镜像ID。图5-39启动菜品服务3)打开Postman访问接口“http://31:8771/admin/dishes/toprecommend”,成功返回数据,结果如图5-40所示:图5-40验证菜品服务4)打开浏览器访问“31:8761/”,看到“DISHSERVICE”已经注册到注册中心,结果如图5-41所示:图5-41菜品注册到注册中心步骤4:使用Docker容器部署网关服1)执行“dockerimages”命令查看镜像,结果如图5-42所示:图5-42查看镜像2)执行“dockerrun--nameordersys_gateway-d-p8762:876208321d099afc”命令启动菜品服务,其中08321d099afc为ordersys_gateway的镜像ID,结果如图5-43所示:图5-43启动菜品服务3)打开浏览器访问“31:8761/”,看到“GATEWAY”已经注册到注册中心,结果如图5-44所示:图5-44启动菜品服务4)打开Postman访问接口“http://31:8762/dishservice/admin/dishes/toprecommend”,成功返回数据代表网关部署成功,结果如图5-45所示:图5-45网关中转到菜品服务5)打开浏览器访问“31:9411/zipkin/”链路追踪系统,查询“serviceName=dishservice”,结果如图5-46所示:图5-46验证网关服务拓展练习使用Docker容器部署订单服务参照步骤三,使用Docker容器部署订单服务,并查看注册中心是否成功注册。知识小结【对应证书技能】本任务主要是实现两种应用服务的部署,一种是Zipkin第三方服务的部署,另一种是餐厅点餐系统应用服务的部署。1)第三方服务服务的部署,如Zipkin服务部署,首先使用dockerpull命令拉取Zipkin镜像,然后使用dockerrun命令运行Zipkin容器提供服务。2)餐厅点餐系统应用服务的部署,直接使用dockerrun命令运行docker仓库中的镜像即可。注意在运行容器的时候使用“-p”参数设置容器端口映射宿主机端口。本任务知识技能点与等级证书技能的对应关系见表5-11。表5-11任务8知识技能点与等级证书技能对应任务2知识技能点对应证书技能知识点技能点工作领域工作任务职业技能要求等级Docker基础操作掌握Docker搜索、拉取、配置网络端口以及运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年县乡教师选调考试《教育学》通关试卷提供答案解析及参考答案详解一套
- 2025年县乡教师选调考试《教育学》测试卷含答案详解(研优卷)
- 高空作业安全教育培训试卷及答案
- 企业信息安全宣传培训课程(标准版)
- 中信期货佛山分公司2026届校园招聘备考题库附参考答案详解(b卷)
- 2026年项目管理师《综合能力》培训试卷
- 2026浙江丽水开放大学招聘专业技术人员1人备考题库附答案详解(培优a卷)
- 施工技术管理制度
- 2026春季福建泉州市晋江市第五实验小学语文自聘教师招聘2人备考题库及参考答案详解(精练)
- 2026广西东盟经济技术开发区(南宁华侨投资区)里建社区卫生服务中心招聘9人备考题库带答案详解(考试直接用)
- 2025年法医临床学题库及答案
- 医疗器械研究者手册模板
- 装配式建筑碳核算 课件 第1-4章 引言、建筑碳排放量化理论、装配式建筑碳排放、装配式建筑碳排放系数分析与核算
- 2025年中考体育专项题库及答案
- ISO9001-2026质量管理体系中英文版标准条款全文
- 高考语文复习:语文主观题答题规范大全
- 2025年4月感控导尿管CAUTI相关尿路感染管理试题含答案
- 训犬基本知识培训课件
- 随州国投面试题目及答案
- 电频炉买卖合同协议书范本
- 产业集群资金管理办法
评论
0/150
提交评论