资讯详情

SpringCloud+Nacos+RabbitMQ+Docker+Redis+Elasticsearch Java微服务(一)

看完黑马程序员的免费课程,感觉受益匪浅,写笔记,记录,鼓励你,不断更新。

课程地址:https://www.bilibili.com/video/BV1LQ4y127n4?p=1

1.

2.了解微服务

单体结构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

优点: 架构简单 部署成本低

缺点: 耦合度高

分布式架构:根据业务功能拆分系统,每个业务功能模块作为独立项目开发,称为服务。

优点减少服务耦合有利于服务升级和扩展

缺点服务调用关系复杂

服务拆分粒度如何?

如何维护服务集群地址?

如何实现服务间的远程调用?

如何感知服务健康状况?

,微服务架构特点:

单一职责:微服务拆分粒度较小,每项服务对应于唯一的业务能力,实现单一职责,避免重复业务发展

面向服务:微服务暴露业务界面

自治:团队、技术、数据、部署

隔离性强:服务调用隔离、容错、降级,避免等级问题

单体架构的特点?

简单方便,耦合高,扩展性差,适合小项目。例如:学生管理系统

分布式架构的特点?

松耦合,扩展性好,但结构复杂,难度大。适用于京东、淘宝等大型互联网项目

微服务

优点:拆分粒度小,服务独立,耦合度低

缺点:结构非常复杂,运维、监控、部署难度提高

3.微服务技术比较

微服务需要技术框架,全球互联网公司正在积极尝试自己的微服务着陆技术。中国最著名的是SpringCloud阿里巴巴Dubbo。

4.SpringCloud

SpringCloud它是中国使用最广泛的微服务框架。

官网地址:https://spring.io/projects/spring-cloud。

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动组装,为开箱即用提供了良好的体验:

Spring boot是Spring基于脚手架的快速配置spring boot单个微服务的快速开发。

Spring Cloud基于Spring Boot,为微服务系统开发中的架构问题、服务注册与发现、服务消费、服务保护与熔断、网关、分布式呼叫跟踪、分布式配置管理等提供了一套完整的解决方案。

SpringCloud与SpringBoot版本兼容性如下:

5.服务拆分

单一职责:不同的微服务,不要重复开发相同的业务

数据独立性:不访问其他微服务的数据库

面向服务:将自己的业务暴露为界面,为其他微服务调用

拆分为

微服务需要根据业务模块进行拆分,以实现单一职责,不要重复开发相同的业务

其他微服务可以将业务暴露为接口

不同的微服务应该有自己独立的数据库

根据服务拆分的原则,订单模块不得直接查询用户数据库,应采用远程调用;

RestTemplate 是从 Spring3.0 开始支持一个 HTTP 它提供了一种常见的请求工具REST请求方案的模版,大大提高客户端的编写效率。

在order-service的OrderApplication中注册RestTemplate

@MapperScan("cn.itcast.order.mapper") @SpringBootApplication public class UsrServerApplication {    public static void main(String[] args) {     SpringApplication.run(UsrServerApplication.class, args);   }    @Bean   public RestTemplate restTemplate(){     return new RestTemplate();   } }

修改order-service中的OrderService的queryOrderById方法:

@Service  public class OrderService {                  @Autowired         private RestTemplate restTemplate;              public Order queryOrderById(Long orderId) {                 // 1.查询订单                 Order order = orderMapper.findById(orderId);                 // TODO 2.查询用户                  String url = "http://localhost:8081/user/"    order.getUserId();                 User user = restTemplate.getForObject(url, User.class);                 // 3.封装user信息                 order.setUser(user);                // 4.返回                 return order;         } }

如何获取服务提供者的地址信息?

如果有多个服务提供商,消费者应该如何选择?

消费者如何了解服务提供商的健康状况?

使用RestTemplate远程调用,代码不够优雅,功能相对简单,在学习中Eureka注册中心后,这些问题将得到解决

7.消费者和提供商

服务提供者:暴露接口给其它微服务调用

服务消费者:调用其他微服务提供的界面

其实提供者和消费者的角色是相对的

服务可以同时为服务提供者和消费者服务

8.Eureka注册中心

消费者应该如何获取服务提供商的具体信息?

服务提供商启动时向eureka注册自己的信息,eureka保存这些信息,即步骤

标签: 61082连接器sk3351压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台