前言:java初级小菜鸟,最近有个工作是将一个项目改造成微服务架构,自己学习了springcloud,将学习过程中的笔记和心得分享给大家,如果有理解不对的地方,大家可以评论留言,相互交流,学习。
一 概述:关于springboot,springcloud,微服务的一些概念
-
Spring Boot:
-
优势:可以简化配置;
-
核心思想:约定大于配置;
-
-
Spring Cloud:
-
概念:是一系列框架的有序集合;基于spring boot简化了分布式系统基础设施的开发;
-
核心功能:
-
分布式/版本化配置;
-
服务注册和发现;
-
路由;
-
服务和服务之间的调用;
-
负载均衡;
-
断路器;
-
分布式消息传递;
-
-
运行流程:
-
组件:API网关(Zuul);注册中心(Eureka);负载均衡(Ribbon);通信(Feign);超时熔断(Hystrix);监控(Turbine)
-
流程:请求-->zuul-->从Eureka获取可用服务-->Feign通信-->Ribbon负载均衡分发-->Hystrix超时熔断-->Turbine监控
-
-
-
微服务,springcloud,springboot三者之间的关系:
-
微服务是一种架构的理念,提出了微服务的设计原则,从理论为具体的技术落地提供了指导思想
-
Spring Boot是一套快速配置脚手架,可以基于Spring Boot快速开发单个微服务;
-
Spring Cloud是一个基于Spring Boot实现的服务治理工具包;
-
Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;
-
-
dubbo和spring cloud:
-
公司背景:dobbo--阿里巴巴,自身业务为主;spring boot/cloud--spring家族,企业级开源框架;
-
活跃度:dobbo近两年未更新;spring boot/cloud很活跃;
-
平台架构:dubbo框架只是专注于服务之间的治理;spring boot/cloud几乎考虑了服务治理的方方面面;
-
二 spring boot/cloud项目中涉及的一些注解的总结分类
- controller层:
- 类注解:
- @Controlller:
-
@RequestMapping:在类上定义请求路径;
-
@RestController:相当于@Controller和@Responsebody的组合,这个类的所有方法返回json;
-
方法注解:
-
@PostMapping:相当于@RequestMapping(method="RequestMethod.POST")
-
@GetMapping:相当于@RequestMapping(method="RequestMethod.GET");
-
@RequestMapping:在方法上定义此方法的请求路径,如果类上也定义了,则为类路径+方法路径;
-
@GetMapping和@PostMapping的区别:同样一个方法实现,用@get定义和@post定义,用浏览器测试的时候@get能通过测试,而@post不能,因为浏览器地址栏访问都是采用get请求,因此如果以post定义方法,那么由于请求与实现的不一致,会返回405错误;
-
当然还有@PutMapping、@DeleteMapping、@PatchMapping等注解帮助简化常用的HTTP方法的映射,用的少就不细说了。
-
@Responsebody:
-
作用:将方法返回对象通过适当的转换器转换为指定的格式后,写入到response对象的body区,通常用来返回json和xml数据;
-
在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据; 等同于:response.getWriter.write(JSONObject.fromObject(user).toString());
-
-
@RequestBody:
-
作用: 该注解用于读取Request请求的body部分数据通过适当的转换器转换后,绑定到参数上;
-
例如application/json, application/xml等这些格式的数据,必须使用@RequestBody来处理;
-
-
@RequestParam:
-
作用:将请求参数绑定到处理函数方法的变量中;设置默认值;
-
举例:public void function(@RequestParam(name="id",defaultValue="0") Long userId);
-
-
@PathVariable:
-
将 URL 中占位符参数绑定到控制器处理方法的入参中;
-
举例:请求路径为/user/xiaoming,返回user:xiaoming;
@RequestMapping("/user/{username}") public String getUerBlog(@PathVariable String username) { return "user: " + username; }
-
-
- 类注解:
- 未完待续