当前位置: 首页 > news >正文

微服务-SpringCloud学习(一)

1.认识微服务

1.1什么是单体架构

将业务的所有功能集中在一个项目中开发,打成一个包进行部署
优点:

  • 架构简单
  • 部署成本低

缺点:

  • 耦合度高(维护困难,系统升级困难)

分布式架构

根据业务功能对系统做拆分,每个业务功能模块作为独立的项目开发,称为一个服务
在这里插入图片描述优点:

  • 降低耦合度
  • 有利于服务的升级和拓展

缺点:

  • 服务调用关系错综复杂

1.3微服务的特征

  • 职责单一:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
  • 自治:团队独立、技术独立、数据独立,独立部署交付
  • 面向服务:服务提供统一标准的接口,与语言和技术无关
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
    所以可以认为微服务是一种经过良好架构设计的分布式架构方案。各个互联网公司都在积极尝试,为让自己的微服务落地。其中在Java领域中尤为出色就是SpringCloud
    提供的方案。

1.4SpringCloud

SpirngCloud继承了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用的体验。其中常见的组件如下:
在这里插入图片描述SpirngCloud底层是依赖于SpringBoot的并且还有版本兼容关系:
在这里插入图片描述

2.服务的拆分和远程的调用

2.1服务拆分原则

  • 不同的微服务,不要重复开发相同业务
  • 微服务数据独立,不要访问其它微服务的数据库
  • 微服务可以将自己业务暴露为接口,供其它微服务调用

在这里插入图片描述

2.2远程调用

假设我们有一个订单服务和一个用户服务,我们调用订单服务时要求调用,用户服务。该怎么做。
步骤:

  • 注册一个RestTemplate的实例到Spring容器
  • 修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User
  • 将查询的User填充到Order对象,一起返回

2.2.1 注册RestTemplate

首先,我们在order-service服务中的OrderAlication启动类中注册RestTemplate实例:

package cn.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("cn.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

2.2.2实现远程调用

修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法:
在这里插入图片描述

2.3提供者与消费者

在服务关系的调用中,会有l两个不同的角色:
**服务的提供者:**一次业务中,被其他微服务调用的服务。(提供接口给其它服务)
**服务的消费者:**一次业务中,调用其它微服务的服务。(调用其他微服务提供的接口)
在这里插入图片描述但是服务的提供者与服务的消费者的角色不固定,而是相对于业务而言。
如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?

  • 对于A调用B的业务而言:A是服务的消费者,B是服务的提供者
  • 对于B调用C的业务而言:B是服务的消费者,C是服务的提供者
    所以B既可以是消费者也可以是提供者

相关文章:

  • 八股文之设计模式
  • 第6章 初识Spring框架
  • 【明年找到好工作】:面试题打卡第二天
  • 企业Java实战面试题
  • 多次握手登录
  • gdb调试 常用命令
  • 华为云上安装mysql-5.7.38-极其详细的安装教程
  • vue父子组件传值:父传子、子传父
  • 使用花生壳做内网穿透
  • 基于SSM的学生宿舍管理系统
  • 第二章第六节 ST图与迭代优化
  • Kotlin(九)类、属性、构造函数
  • Java 八股文能不背吗?Java 面试都只是背答案吗?
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • JS垃圾回收与内存泄漏
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • codis proxy处理流程
  • docker python 配置
  • Docker下部署自己的LNMP工作环境
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • HashMap ConcurrentHashMap
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • k8s 面向应用开发者的基础命令
  • Lsb图片隐写
  • Web Storage相关
  • Zsh 开发指南(第十四篇 文件读写)
  • 成为一名优秀的Developer的书单
  • 程序员最讨厌的9句话,你可有补充?
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 前嗅ForeSpider采集配置界面介绍
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 深入 Nginx 之配置篇
  • 树莓派 - 使用须知
  • ​io --- 处理流的核心工具​
  • ​虚拟化系列介绍(十)
  • #NOIP 2014# day.2 T2 寻找道路
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (Note)C++中的继承方式
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二十四)Flask之flask-session组件
  • (分布式缓存)Redis分片集群
  • (六)Hibernate的二级缓存
  • (转)c++ std::pair 与 std::make
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • . NET自动找可写目录
  • ..回顾17,展望18
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Standard 的管理策略
  • .net 程序发生了一个不可捕获的异常