spring cloud 入门操作手册(全_第1页
spring cloud 入门操作手册(全_第2页
spring cloud 入门操作手册(全_第3页
spring cloud 入门操作手册(全_第4页
spring cloud 入门操作手册(全_第5页
已阅读5页,还剩284页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 HYPERLINK / spring boot 2.1.4spring cloud Greenwich.SR1课前资料 HYPERLINK /noteshare?id=42c30d89f50ee57a54e013f2b8fc4fe5&sub=601E92B306E6412C81EAF36637A7029A STS 插件安装 HYPERLINK /noteshare?id=45bc7db2ad61efd163281d2e5845e8dd&sub=DE9C5A3EE14F4645997E9FB91CD8D1BF lombok 插件安装 HYPERLINK /noteshare?id=1cd70f

2、3144281cce5e40c46386d2d747&sub=8C0D7F77FA1C4429B36554A9CE246D08 maven settings.xmlspring cloud 入门手册(全)分段文档链接: HYPERLINK /ynoteshare1/index.html?id=888d5f3055ee81001cbf3eefa0c7be4d&type=note 一四 HYPERLINK /ynoteshare1/index.html?id=32e46c37f4a3f22ea1b3a6c7b9c6f27d&type=note 五十 HYPERLINK /ynoteshare1/i

3、ndex.html?id=6fe9c30e28578bb18370c1acd0a3c822&type=note 十一十四 HYPERLINK /ynoteshare1/index.html?id=95a492ab5a94de426e64d734e6e4199f&type=note 十五二十 HYPERLINK /ynoteshare1/index.html?id=49dee3b0fc0a40637d6d4be10dc6da5e&type=note 二十一二十六目录目录spring cloud 介绍spring cloud 技术组成Spring Cloud 对比 Dubbo 一、service

4、- 服务二、commons 通用项目新建 maven 项目pom.xmljava 源文件pojoItemUser OrderserviceItemServiceUserService OrderServiceutilCookieUtilJsonUtil JsonResult三、item service 商品服务新建 spring boot 起步项目选择依赖项pom.xml application.yml 主程序java 源文件ItemServiceImplItemController 四、user service 用户服务新建 spring boot 起步项目选择依赖项pom.xmlappli

5、cation.yml 主程序java源文件UserServiceImplUserController五、order service 订单服务新建 spring boot 起步项目选择依赖项pom.xml applicatoin.yml 主程序java 源文件OrderServiceImplOrderController 六、service 访问测试七、eureka 注册与发现创建 eureka server 项目:sp05-eurekapom.xml application.yml 主程序修改 hosts 文件,添加 eureka 域名映射启动,并访问测试八、service provider

6、服务提供者pom.xml 添加 eureka 客户端依赖application.yml 添加 eureka注册配置主程序启用服务注册发现客户端启动,并访问 eureka 查看注册信息九、ribbon 服务消费者新建 sp06-ribbon 项目pom.xml application.yml 主程序RibbonController启动服务,并访问测试十、eureka 和 “服务提供者”的高可用eureka 高可用application.ymlfiles.activeSTS 配置启动参数访问 eureka 服务器,查看注册信息eureka客户端注册时,向两个服务器注册item-service 高可

7、用application.yml 配置启动参数 启动测试十一、ribbon 负载均衡添加 ribbon 起步依赖(可选)LoadBalancedRestTemplate 设置访问路径设置为服务id 访问测试ribbon 重试pom.xml 添加 spring-retry 依赖application.yml 配置 ribbon 重试主程序设置 RestTemplate 的请求工厂的超时属性item-service 的 ItemController 添加延迟代码,以便测试 ribbon 的重试机制访问,测试 ribbon 重试机制十二、ribbon + hystrix 断路器微服务宕机时,ribb

8、on 无法转发请求复制 sp06-ribbon 项目,命名为sp07-hystrix 修改 pom.xml添加 hystrix 起步依赖修改 application.ymlEnableCircuitBreaker主程序添加RibbonController 中添加降级方法hystrix 短路超时设置启动项目进行测试十三、hystrix dashboard 断路器仪表盘启用 hystrix 断路器sp07-hystrix 项目添加 actuator,并暴露 hystrix 监控端点pom.xml 添加 actuator 依赖调整 application.yml 配置,并暴露 hystrix 监控端

9、点访问 actuator 路径,查看监控端点新建 sp08-hystrix-dashboard 项目pom.xmlapplication.ymlEnableHystrixDashboardEnableDiscoveryClient主程序添加和启动,并访问测试访问 hystrix dashboard填入 hystrix 的监控端点,开启监控hystrix 熔断使用 apache 的并发访问测试工具 abhystrix 配置十四、feign 整合ribbon+hystrix 新建 sp09-feign 项目pom.xmlapplication.ymlEnableDiscoveryClientEna

10、bleFeignClients主程序添加和java 源文件feign 声明式客户端ItemFeignService UserFeignService OrderFeignService FeignController启动服务,并访问测试十五、feign + ribbon 负载均衡和重试application.yml 配置 ribbon 超时和重试启动服务,访问测试 十六、feign + hystrix 降级feign 启用 hystrixapplication.yml 添加配置可以添加配置,暂时减小降级超时时间,以便后续对降级进行测试feign + hystrix 降级降级类ItemFeign

11、ServiceFBUserFeignServiceFB OrderFeignServiceFBfeign service 接口中指定降级类ItemFeignService UserFeignService OrderFeignService启动服务,访问测试十七、feign + hystrix 监控和熔断测试修改sp09-feign项目pom.xml 添加 hystrix 起步依赖EnableCircuitBreaker主程序添加hystrix.streamsp09-feign 配置 actuator,暴露actuator 依赖application.yml 暴露启动服务,查看监控端点hyst

12、rix dashboard熔断测试监控端点hystrix.stream端点十八、order service 调用商品库存服务和用户服务pom.xmlapplication.yml 主程序ItemFeignService UserFeignServiceItemFeignServiceFBUserFeignServiceFB OrderServiceImplorder-service 配置启动参数启动服务,访问测试hystrix dashboard 监控 order service 断路器十九、hystrix + turbine 集群聚合监控新建 sp10-turbine 项目pom.xml a

13、pplication.yml 主程序访问测试二十、zuul API网关新建 sp11-zuul 项目pom.xml applicatoin.yml 主程序启动服务,访问测试zuul + ribbon 负载均衡zuul + ribbon 重试pom.xml 添加 spring-retry 依赖配置 zuul 开启重试,并配置 ribbon 重试参数zuul + hystrix 降级创建降级类ItemServiceFallback OrderServiceFallbackzuul + hystrix 熔断zuul + hystrix dashboard 监控暴露 hystrix.stream 监控

14、端点开启监控zuul + turbine 聚合监控熔断测试二十一、zuul 请求过滤定义过滤器,继承 ZuulFilter访问测试二十二、zuul Cookie过滤二十三、config 配置中心github 上存放配置文件新建 Project,命名为 config将sp02,sp03,sp04,sp11四个项目的yml配置文件,复制到config项目,并改名将 config 项目上传到 githubconfig 服务器新建 sp12-config 项目pom.xml application.ymlEnableConfigServerEnableDiscoveryClient主程序添加和启动,访

15、问测试config 客户端pom.xml 添加 config 客户端依赖在四个项目中添加 bootstrap.yml启动服务,观察从配置中心获取配置信息的日志配置刷新pom.xmlyml 配置文件中暴露 refresh 端点重启服务,查看暴露的刷新端点RefreshScopeUserServiceImpl 添加注解先启动 user-service,再修改 config项目的user-service-dev.yml文件并提交访问刷新端点刷新配置访问 user-service,查看动态更新的新用户数据二十四、config bus + rabbitmq 消息总线配置刷新rabbitmq 安装笔记需要

16、动态更新配置的微服务,添加 spring cloud bus 依赖,并添加 rabbitmq 连接信息pom.xml 添加 spring cloud bus 依赖配置文件中添加 rabbitmq 连接信息config-server 添加 spring cloud bus 依赖、配置rabbitmq连接信息,并暴露 bus- refresh 监控端点pom.xmlapplication.yml启动服务,请求刷新端点发布刷新消息config 本地文系统把配置文件保存到 sp12-config 项目的 resources/config 目录下修改 application.yml 激活 native

17、profile,并指定配置文件目录二十五、sleuth 链路跟踪微服务中添加 spring cloud sleuth 依赖在控制台查看链路跟踪日志二十六、sleuth + zipkin 链路分析链路数据抽样比例zipkin 服务下载 zipkin 服务器启动 zipkin 时,连接到 rabbitmq 微服务添加 zipkin 起步依赖启动并访问服务,访问 zipkin 查看链路分析spring cloud 介绍spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数

18、据监控等,都可以用spring boot 的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。spring cloud 对于中小型互联网公司来说是一种福音,因为这类公司往往没有实力或者没有足够的资金投入去开发自己的分布式系统基础设施,使用 spring cloud 一站式解决方案能在从容应对业务发展的同时大大减少开发成本。同时,随着近几年微服务架构和 dock

19、er 容器概念的火爆,也会让spring cloud 在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在目前五花八门的分布式解决方案中提供了标准化的、一站式的技术方案,意义可能会堪比当年 servlet 规范的诞生,有效推进服务端软件系统技术水平的进步。spring cloud 技术组成eureka微服务治理,服务注册和发现ribbon负载均衡、请求重试hystrix断路器,服务降级、熔断feignribbon + hystrix 集成,并提供生命式客户端hystrix dashboard 和 turbine hystrix 微服务监控zuulAPI 网关,提供微服务的统一入口,并提供

20、统一的权限验证config 配置中心bus消息总线, 配置刷新sleuth+zipkin 链路跟踪Spring Cloud 对比 DubboDubboDubbo只是一个远程调用(RPC)框架默认基于长连接,支持多种序列化格式Spring Cloud 框架集提供了一整套微服务解决方案(全家桶)一、service - 服务spring cloud商品服务 item service,端口 8001 用户服务 user service,端口 8101 订单服务 order service,端口 8201二、commons 通用项目返回目录新建 maven 项目返回目录pom.xml4.0.0com.t

21、edusp01commons0.0.1SNAPSHOTsp01commonscom.fasterxml.jackson.modulejacksonmoduleparameternames2.9.8com.fasterxml.jackson.datatypejacksondatatypejdk82.9.8com.fasterxml.jackson.datatypejacksondatatypejsr3102.9.8com.fasterxml.jackson.datatypejacksondatatypeguava2.9.8jectlomboklombok1.18.6javax.servletja

22、vax.servletapi3.1.0org.slf4jslf4japi1.7.26monscommonslang33.9org.apache.maven.pluginsmavencompilerplugin3.8.01.81.8java 源文件pojoItempackage com.tedu.sp01.pojo;import lombok.AllArgsConstructor; import lombok.Data;import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class It

23、em private Integer id; private String name; private Integer number;Userpackage com.tedu.sp01.pojo;import lombok.AllArgsConstructor; import lombok.Data;import lombok.NoArgsConstructor;Data NoArgsConstructorAllArgsConstructor public class User private Integer id; private String username; private Strin

24、g password;Orderpackage com.tedu.sp01.pojo; import java.util.List;import lombok.AllArgsConstructor; import lombok.Data;import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class Order private String id; private User user; private List items;serviceItemServicepackage com.t

25、edu.sp01.service; import java.util.List;import com.tedu.sp01.pojo.Item;public interface 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 addSc

26、ore(Integer id, Integer score);OrderServicepackage com.tedu.sp01.service;import com.tedu.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.HttpSer

27、vletRequest; import javax.servlet.http.HttpServletResponse;public class CookieUtil /*param responseparam nameparam valueparam maxAge*/public static void setCookie(HttpServletResponse response,String name, String value, String domain, String path, int maxAge) Cookie cookie = new Cookie(name, value);i

28、f(domain != null) cookie.setDomain(domain);cookie.setPath(path); cookie.setMaxAge(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(HttpS

29、ervletResponse response, String name, String value)setCookie(response, name, value, null, /, 3600);public static void setCookie(HttpServletResponse response, String name) setCookie(response, name, , null, /, 3600);/*param requestparam namereturn*/public static String getCookie(HttpServletRequest req

30、uest, String name) String value = null;Cookie cookies = request.getCookies(); if (null != cookies) for (Cookie cookie : cookies) if (cookie.getName().equals(name) value = cookie.getValue();return value;/*param responseparam namereturn*/public static void removeCookie(HttpServletResponse response, St

31、ring name, String domain, String path) setCookie(response, name, , domain, 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.BigDec

32、imal; import java.math.BigInteger; import .URL;import java.nio.charset.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.JsonGenera

33、tor; import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.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.

34、databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature; 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.JavaTi

35、meModule;import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; 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_ENABL

36、E_INDENT_OUTPUT = false; private static String CSV_DEFAULT_COLUMN_SEPARATOR = ,; static try initMapper(); configPropertyInclusion(); configIndentOutput(); configCommon(); catch (Exception e) log.error(jackson config error, e);private static void initMapper() mapper = new ObjectMapper();private stati

37、c void configCommon() config(mapper);private static void configPropertyInclusion() mapper.setSerializationInclusion(DEFAULT_PROPERTY_INCLUSION);private static void configIndentOutput() mapper.configure(SerializationFeature.INDENT_OUTPUT, IS_ENABLE_INDENT_OUTPUT);private static void config(ObjectMapp

38、er objectMapper) objectMapper.enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_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_

39、DUP_TREE_KEY); objectMapper.enable(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS); objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);objectMapper.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES); objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); obje

40、ctMapper.enable(JsonParser.Feature.ALLOW_COMMENTS); objectMapper.disable(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_TI

41、MESTAMPS); objectMapper.setDateFormat(new SimpleDateFormat(yyyyMMdd HH:mm:ss); objectMapper.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); objectMapper.registerModule(new ParameterNamesModule(); objectMapper.registerModule(new Jdk8Module(); objectMapper.registerModule(new JavaTimeModule(); objectMa

42、pper.registerModule(new GuavaModule();public static void setSerializationInclusion(JsonInclude.Include inclusion) DEFAULT_PROPERTY_INCLUSION = inclusion;configPropertyInclusion();public static void setIndentOutput(boolean isEnable) IS_ENABLE_INDENT_OUTPUT = isEnable; configIndentOutput();public stat

43、ic V from(URL url, Class c) try return mapper.readValue(url, c); catch (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(ja

44、ckson 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.error(jackson from error, file path: , type: , file.getPath(), c,return null;e);public static V from(Object jsonObj, Class c) try return mapper.rea

45、dValue(jsonObj.toString(), c); catch (IOException e) log.error(jackson from error, json: , type: , jsonObj.toString(), c,return null;public static V from(String json, Class c) try return mapper.readValue(json, c); catch (IOException e) log.error(jackson from error, json: , type: , json, c, e); retur

46、n null;public static V from(URL url, TypeReference type) try return mapper.readValue(url, type); catch (IOException e) log.error(jackson from error, url: , type: , url.getPath(), type, e); return null;public static V from(InputStream inputStream, TypeReference type) try return mapper.readValue(input

47、Stream, type); catch (IOException e) log.error(jackson from error, type: , type, e); return null;public static V from(File file, TypeReference type) try return mapper.readValue(file, type); catch (IOException e) log.error(jackson from error, file path: , type: , file.getPath(),type, e);return null;e

48、);public static V from(Object jsonObj, TypeReference type) try return mapper.readValue(jsonObj.toString(), type); catch (IOException e) log.error(jackson from error, json: , type: , jsonObj.toString(), type,return null;public static V from(String json, TypeReference type) try return mapper.readValue

49、(json, type); catch (IOException e) log.error(jackson from error, json: , type: , json, type, e); return null;public static String to(List list) try return mapper.writeValueAsString(list); catch (JsonProcessingException e) log.error(jackson to error, obj: , list, e); return null;public static String

50、 to(V v) try return mapper.writeValueAsString(v); catch (JsonProcessingException e) log.error(jackson to error, obj: , v, e); return null;public static void toFile(String path, List list) try (Writer writer = new FileWriter(new File(path), true) mapper.writer().writeValues(writer).writeAll(list); wr

51、iter.flush(); catch (Exception e) log.error(jackson to file error, path: , list: , path, list, e);public static void toFile(String path, V v) try (Writer writer = new FileWriter(new File(path), true) mapper.writer().writeValues(writer).write(v); writer.flush(); catch (Exception e) log.error(jackson

52、to file error, path: , obj: , path, v, e);public static String getString(String json, String key) if (StringUtils.isEmpty(json) return null;try JsonNode node = mapper.readTree(json); if (null != node) return node.get(key).toString(); else return null; catch (IOException e) log.error(jackson get stri

53、ng error, json: , key: , json, key, e); return null;public static Integer getInt(String json, String key) if (StringUtils.isEmpty(json) return null;try JsonNode node = mapper.readTree(json); if (null != node) return node.get(key).intValue(); else return null; catch (IOException e) log.error(jackson

54、get int error, json: , key: , json, key, e); return null;public static Long getLong(String json, String key) if (StringUtils.isEmpty(json) return null;try JsonNode node = mapper.readTree(json); if (null != node) return node.get(key).longValue(); else return null; catch (IOException e) log.error(jack

55、son get long error, json: , key: , json, key, e); return null;public static Double getDouble(String json, String key) if (StringUtils.isEmpty(json) return null;try JsonNode node = mapper.readTree(json); if (null != node) return node.get(key).doubleValue(); else return null; catch (IOException e) log

56、.error(jackson get double error, json: , key: , json, key, e); return null;public static BigInteger getBigInteger(String json, String key) if (StringUtils.isEmpty(json) return new BigInteger(String.valueOf(0.00);try JsonNode node = mapper.readTree(json); if (null != node) return node.get(key).bigInt

57、egerValue(); else return null; catch (IOException e) log.error(jackson get biginteger error, json: , key: , json, key, e); return null;public static BigDecimal getBigDecimal(String json, String key) if (StringUtils.isEmpty(json) return null;try JsonNode node = mapper.readTree(json); if (null != node

58、) return node.get(key).decimalValue(); else return null; catch (IOException e) log.error(jackson get bigdecimal error, json: , key: , json, key, e); return null;public static boolean getBoolean(String json, String key) if (StringUtils.isEmpty(json) return false;try JsonNode node = mapper.readTree(js

59、on); if (null != node) return node.get(key).booleanValue(); else return false; catch (IOException e) log.error(jackson get boolean error, json: , key: , json, key, e); return false;public static byte getByte(String json, String key) if (StringUtils.isEmpty(json) return null;try JsonNode node = mappe

60、r.readTree(json); if (null != node) return node.get(key).binaryValue(); else return null; catch (IOException e) log.error(jackson get byte error, json: , key: , json, key, e); return null;public static ArrayList getList(String json, String key) if (StringUtils.isEmpty(json) return null;String string

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论