spring cloud 入门操作手册(全.docx

上传人:暗伤 文档编号:27176861 上传时间:2022-07-22 格式:DOCX 页数:289 大小:4.41MB
返回 下载 相关 举报
spring cloud 入门操作手册(全.docx_第1页
第1页 / 共289页
spring cloud 入门操作手册(全.docx_第2页
第2页 / 共289页
点击查看更多>>
资源描述

《spring cloud 入门操作手册(全.docx》由会员分享,可在线阅读,更多相关《spring cloud 入门操作手册(全.docx(289页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、spring boot 2.1.4spring cloud Greenwich.SR1课前资料STS 插件安装lombok 插件安装maven settings.xmlspring cloud 入门手册(全)分段文档链接:一四五十十一十四十五二十二十一二十六目录目录spring cloud 介绍spring cloud 技术组成Spring Cloud 对比 Dubbo 一、service - 服务二、commons 通用项目新建 maven 项目pom.xmljava 源文件pojoItemUser OrderserviceItemServiceUserService OrderServic

2、eutilCookieUtilJsonUtil JsonResult三、item service 商品服务新建 spring boot 起步项目选择依赖项pom.xml application.yml 主程序java 源文件ItemServiceImplItemController 四、user service 用户服务新建 spring boot 起步项目选择依赖项pom.xmlapplication.yml 主程序java源文件UserServiceImplUserController五、order service 订单服务新建 spring boot 起步项目选择依赖项pom.xml a

3、pplicatoin.yml 主程序java 源文件OrderServiceImplOrderController 六、service 访问测试七、eureka 注册与发现创建 eureka server 项目:sp05-eurekapom.xml application.yml 主程序修改 hosts 文件,添加 eureka 域名映射启动,并访问测试八、service provider 服务提供者pom.xml 添加 eureka 客户端依赖application.yml 添加 eureka注册配置主程序启用服务注册发现客户端启动,并访问 eureka 查看注册信息九、ribbon 服务消

4、费者新建 sp06-ribbon 项目pom.xml application.yml 主程序RibbonController启动服务,并访问测试十、eureka 和 “服务提供者”的高可用eureka 高可用application.ymlspring.profiles.activeSTS 配置启动参数访问 eureka 服务器,查看注册信息eureka客户端注册时,向两个服务器注册item-service 高可用application.yml 配置启动参数 启动测试十一、ribbon 负载均衡添加 ribbon 起步依赖(可选)LoadBalancedRestTemplate 设置访问路径设置

5、为服务id 访问测试ribbon 重试pom.xml 添加 spring-retry 依赖application.yml 配置 ribbon 重试主程序设置 RestTemplate 的请求工厂的超时属性item-service 的 ItemController 添加延迟代码,以便测试 ribbon 的重试机制访问,测试 ribbon 重试机制十二、ribbon + hystrix 断路器微服务宕机时,ribbon 无法转发请求复制 sp06-ribbon 项目,命名为sp07-hystrix 修改 pom.xml添加 hystrix 起步依赖修改 application.ymlEnableC

6、ircuitBreaker主程序添加RibbonController 中添加降级方法hystrix 短路超时设置启动项目进行测试十三、hystrix dashboard 断路器仪表盘启用 hystrix 断路器sp07-hystrix 项目添加 actuator,并暴露 hystrix 监控端点pom.xml 添加 actuator 依赖调整 application.yml 配置,并暴露 hystrix 监控端点访问 actuator 路径,查看监控端点新建 sp08-hystrix-dashboard 项目pom.xmlapplication.ymlEnableHystrixDashboar

7、dEnableDiscoveryClient主程序添加和启动,并访问测试访问 hystrix dashboard填入 hystrix 的监控端点,开启监控hystrix 熔断使用 apache 的并发访问测试工具 abhystrix 配置十四、feign 整合ribbon+hystrix 新建 sp09-feign 项目pom.xmlapplication.ymlEnableDiscoveryClientEnableFeignClients主程序添加和java 源文件feign 声明式客户端ItemFeignService UserFeignService OrderFeignService

8、FeignController启动服务,并访问测试十五、feign + ribbon 负载均衡和重试application.yml 配置 ribbon 超时和重试启动服务,访问测试 十六、feign + hystrix 降级feign 启用 hystrixapplication.yml 添加配置可以添加配置,暂时减小降级超时时间,以便后续对降级进行测试feign + hystrix 降级降级类ItemFeignServiceFBUserFeignServiceFB OrderFeignServiceFBfeign service 接口中指定降级类ItemFeignService UserFei

9、gnService OrderFeignService启动服务,访问测试十七、feign + hystrix 监控和熔断测试修改sp09-feign项目pom.xml 添加 hystrix 起步依赖EnableCircuitBreaker主程序添加hystrix.streamsp09-feign 配置 actuator,暴露actuator 依赖application.yml 暴露启动服务,查看监控端点hystrix dashboard熔断测试监控端点hystrix.stream端点十八、order service 调用商品库存服务和用户服务pom.xmlapplication.yml 主程序

10、ItemFeignService UserFeignServiceItemFeignServiceFBUserFeignServiceFB OrderServiceImplorder-service 配置启动参数启动服务,访问测试hystrix dashboard 监控 order service 断路器十九、hystrix + turbine 集群聚合监控新建 sp10-turbine 项目pom.xml application.yml 主程序访问测试二十、zuul API网关新建 sp11-zuul 项目pom.xml applicatoin.yml 主程序启动服务,访问测试zuul +

11、ribbon 负载均衡zuul + ribbon 重试pom.xml 添加 spring-retry 依赖配置 zuul 开启重试,并配置 ribbon 重试参数zuul + hystrix 降级创建降级类ItemServiceFallback OrderServiceFallbackzuul + hystrix 熔断zuul + hystrix dashboard 监控暴露 hystrix.stream 监控端点开启监控zuul + turbine 聚合监控熔断测试二十一、zuul 请求过滤定义过滤器,继承 ZuulFilter访问测试二十二、zuul Cookie过滤二十三、config

12、配置中心github 上存放配置文件新建 Project,命名为 config将sp02,sp03,sp04,sp11四个项目的yml配置文件,复制到config项目,并改名将 config 项目上传到 githubconfig 服务器新建 sp12-config 项目pom.xml application.ymlEnableConfigServerEnableDiscoveryClient主程序添加和启动,访问测试config 客户端pom.xml 添加 config 客户端依赖在四个项目中添加 bootstrap.yml启动服务,观察从配置中心获取配置信息的日志配置刷新pom.xmlyml

13、 配置文件中暴露 refresh 端点重启服务,查看暴露的刷新端点RefreshScopeUserServiceImpl 添加注解先启动 user-service,再修改 config项目的user-service-dev.yml文件并提交访问刷新端点刷新配置访问 user-service,查看动态更新的新用户数据二十四、config bus + rabbitmq 消息总线配置刷新rabbitmq 安装笔记需要动态更新配置的微服务,添加 spring cloud bus 依赖,并添加 rabbitmq 连接信息pom.xml 添加 spring cloud bus 依赖配置文件中添加 rabb

14、itmq 连接信息config-server 添加 spring cloud bus 依赖、配置rabbitmq连接信息,并暴露 bus- refresh 监控端点pom.xmlapplication.yml启动服务,请求刷新端点发布刷新消息config 本地文系统把配置文件保存到 sp12-config 项目的 resources/config 目录下修改 application.yml 激活 native profile,并指定配置文件目录二十五、sleuth 链路跟踪微服务中添加 spring cloud sleuth 依赖在控制台查看链路跟踪日志二十六、sleuth + zipkin

15、链路分析链路数据抽样比例zipkin 服务下载 zipkin 服务器启动 zipkin 时,连接到 rabbitmq 微服务添加 zipkin 起步依赖启动并访问服务,访问 zipkin 查看链路分析spring cloud 介绍spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用spring boot 的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来

16、,通过 spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。spring cloud 对于中小型互联网公司来说是一种福音,因为这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施,使用 spring cloud 一站式解决方案能在从容应对业务发展的同时大大减少开发成本。同时,随着近几年微服务架构和 docker 容器概念的火爆,也会让spring cloud 在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在目前五花八门的分布式解决方案中提供了标准化的、一站式的技术方案,意义可能会

17、堪比当年 servlet 规范的诞生,有效推进服务端软件系统技术水平的进步。spring cloud 技术组成eureka微服务治理,服务注册和发现ribbon负载均衡、请求重试hystrix断路器,服务降级、熔断feignribbon + hystrix 集成,并提供生命式客户端hystrix dashboard 和 turbine hystrix 微服务监控zuulAPI 网关,提供微服务的统一入口,并提供统一的权限验证config 配置中心bus消息总线, 配置刷新sleuth+zipkin 链路跟踪Spring Cloud 对比 DubboDubboDubbo只是一个远程调用(RPC)

18、框架默认基于长连接,支持多种序列化格式Spring Cloud 框架集提供了一整套微服务解决方案(全家桶)一、service - 服务spring cloud商品服务 item service,端口 8001 用户服务 user service,端口 8101 订单服务 order service,端口 8201二、commons 通用项目返回目录新建 maven 项目返回目录pom.xml4.0.0com.tedusp01commons0.0.1SNAPSHOTsp01commonscom.fasterxml.jackson.modulejacksonmoduleparameternames

19、2.9.8com.fasterxml.jackson.datatypejacksondatatypejdk82.9.8com.fasterxml.jackson.datatypejacksondatatypejsr3102.9.8com.fasterxml.jackson.datatypejacksondatatypeguava2.9.8org.projectlomboklombok1.18.6javax.servletjavax.servletapi3.1.0org.slf4jslf4japi1.7.26monscommonslang33.9org.apache.maven.pluginsm

20、avencompilerplugin3.8.01.81.8java 源文件pojoItempackage com.tedu.sp01.pojo;import lombok.AllArgsConstructor; import lombok.Data;import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class Item private Integer id; private String name; private Integer number;Userpackage com.ted

21、u.sp01.pojo;import lombok.AllArgsConstructor; import lombok.Data;import lombok.NoArgsConstructor;Data NoArgsConstructorAllArgsConstructor public class User private Integer id; private String username; private String password;Orderpackage com.tedu.sp01.pojo; import java.util.List;import lombok.AllArg

22、sConstructor; import lombok.Data;import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class Order private String id; private User user; private List items;serviceItemServicepackage com.tedu.sp01.service; import java.util.List;import com.tedu.sp01.pojo.Item;public interfac

23、e ItemService List getItems(String orderId);void decreaseNumbers(List list);UserServicepackage com.tedu.sp01.service; import com.tedu.sp01.pojo.User; public interface UserService User getUser(Integer id);void addScore(Integer id, Integer score);OrderServicepackage com.tedu.sp01.service;import com.te

24、du.sp01.pojo.Order;public interface OrderService Order getOrder(String orderId); void addOrder(Order order);utilCookieUtilpackage com.tedu.web.util;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class CookieUtil /*

25、param response* param name* param value* param maxAge*/public static void setCookie(HttpServletResponse response,String name, String value, String domain, String path, int maxAge) Cookie cookie = new Cookie(name, value);if(domain != null) cookie.setDomain(domain);cookie.setPath(path); cookie.setMaxA

26、ge(maxAge); response.addCookie(cookie);public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) setCookie(response, name, value, null, /, maxAge);public static void setCookie(HttpServletResponse response, String name, String value)setCookie(response, name, va

27、lue, null, /, 3600);public static void setCookie(HttpServletResponse response, String name) setCookie(response, name, , null, /, 3600);/* param request* param name* return*/public static String getCookie(HttpServletRequest request, String name) String value = null;Cookie cookies = request.getCookies

28、(); if (null != cookies) for (Cookie cookie : cookies) if (cookie.getName().equals(name) value = cookie.getValue();return value;/* param response* param name* return*/public static void removeCookie(HttpServletResponse response, String name, String domain, String path) setCookie(response, name, , do

29、main, path, 0);JsonUtilpackage com.tedu.web.util;import java.io.File; import java.io.FileWriter;import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Writer;import java.math.BigDecimal; import java.math.BigInteger; import .URL;import java.nio.charse

30、t.StandardCharsets; import java.text.SimpleDateFormat;import java.util.ArrayList; import java.util.List;import mons.lang3.StringUtils;import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser;import com.fasterxm

31、l.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.Serializa

32、tionFeature; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.datatype.guava.GuavaModule; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;import com.fasterxml.jackson.module.paramnames.ParameterName

33、sModule; import lombok.extern.slf4j.Slf4j;Slf4jpublic class JsonUtil private static ObjectMapper mapper;private static JsonInclude.Include DEFAULT_PROPERTY_INCLUSION = JsonInclude.Include.NON_DEFAULT;private static boolean IS_ENABLE_INDENT_OUTPUT = false; private static String CSV_DEFAULT_COLUMN_SEP

34、ARATOR = ,; static try initMapper(); configPropertyInclusion(); configIndentOutput(); configCommon(); catch (Exception e) log.error(jackson config error, e);private static void initMapper() mapper = new ObjectMapper();private static void configCommon() config(mapper);private static void configProper

35、tyInclusion() mapper.setSerializationInclusion(DEFAULT_PROPERTY_INCLUSION);private static void configIndentOutput() mapper.configure(SerializationFeature.INDENT_OUTPUT, IS_ENABLE_INDENT_OUTPUT);private static void config(ObjectMapper objectMapper) objectMapper.enable(JsonGenerator.Feature.WRITE_BIGD

36、ECIMAL_AS_PLAIN); objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY); objectMapper.enable(DeserializationFeature.FAIL_ON_NUM

37、BERS_FOR_ENUMS); objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);objectMapper.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES); objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); objectMapper.enable(JsonParser.Feature.ALLOW_COMMENTS); objectMapper.disa

38、ble(JsonGenerator.Feature.ESCAPE_NON_ASCII); objectMapper.enable(JsonGenerator.Feature.IGNORE_UNKNOWN); objectMapper.enable(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.setDateFormat(new SimpleDateFormat(yyyyMMdd H

39、H:mm:ss); objectMapper.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); objectMapper.registerModule(new ParameterNamesModule(); objectMapper.registerModule(new Jdk8Module(); objectMapper.registerModule(new JavaTimeModule(); objectMapper.registerModule(new GuavaModule();public static void setSerializa

40、tionInclusion(JsonInclude.Include inclusion) DEFAULT_PROPERTY_INCLUSION = inclusion;configPropertyInclusion();public static void setIndentOutput(boolean isEnable) IS_ENABLE_INDENT_OUTPUT = isEnable; configIndentOutput();public static V from(URL url, Class c) try return mapper.readValue(url, c); catc

41、h (IOException e) log.error(jackson from error, url: , type: , url.getPath(), c, e); return null;public static V from(InputStream inputStream, Class c) try return mapper.readValue(inputStream, c); catch (IOException e) log.error(jackson from error, type: , c, e); return null;e);public static V from(File file, Class c) try return mapper.readValue(file, c); catch (IOException e) log.erro

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁