网站首页 > 博客文章 正文
1.邂逅微服务
任何新技术的出现都是为了解决当前技术或者业务遇到的痛点。
在讲微服务之前,我们需要先聊一下系统架构的演变过程。
任何公司的系统架构不是说上来就是搞微服务,而是有一个不断升级改造的过程。
1.单体应用架构
在互联网早期,很多公司的项目都是单体应用架构。何为单体项目?
就是在一个项目里包含了 controller 层、service 层、dao 层,用户、订单、商品等所有模块全写在一个项目里,然后再把这个项目打包成一个 jar 包,部署到一台服务器上。
2.垂直应用架构
垂直应用架构就是将一个大系统拆分成多个小系统。例如原来公司的一个项目包含了 OA 系统、CRM 系统、后台系统等,现在需要将这些系统全部拆分出来。
每个系统有单独的 controller 层、service 层、dao 层。
3.分布式架构
分布式架构就是抽取系统公共的功能作为一个服务,例如用户服务、订单服务、商品服务等。
然后将这些服务单独部署在服务器上。
你可以理解为每个服务都是一个 springboot 项目,这些 springboot 项目打成 jar 包之后分别部署在服务器上,这些不同的服务组成了一个服务集群。
你可以在某个 springboot 项目的 controller 层远程调用另外一个 springboot 项目的 controller 。
4.分布式 SOA 架构
SOA 全称为 Service-Oriented Architecture,即面向服务的架构。
SOA 架构就是在分布式架构的基础之上增加了一个调度中心,这个调度中心负责对服务进行维护和治理。
目前比较火的 Dubbo 框架就是分布式的 SOA 架构。
5.微服务架构
微服务架构和分布式 SOA 架构有点像,两者都属于典型的分布式组件的系统结构。
微服务是在 SOA 上做的升华,微服务架构强调的一个重点是"业务需要彻底的组件化和服务化"。
2.SpringCloud
SpringCloud 是一个包含多个框架的开发工具集。它以 Spring Boot 为基础实现了很多功能:服务注册、服务发现、负载均衡等。
SpringCloud 是在美国 Netflix 公司开源的组件上面进行了封装,提供了微服务一栈式的解决方案,简化了分布式架构的开发。
SpringCloud 核心组件:
- eureka、consul
- openfeign
- hystrix
- zuul、gateway
- config
所以你不能说 SpringCloud 就是微服务,微服务是一种分布式的架构方案,SpringCloud 是一套实现微服务架构的技术。
3.环境搭建
- SpringBoot 版本:2.7.8
- spring-cloud 版本:2021.0.5
新建 Maven 父子工程项目,其中父项目仅用来管理依赖的版本,所以 packaging 设置为 pom。
接下来依次讲解 SpringCloud 的核心组件。
4.服务注册中心
服务注册中心主要完成对整个微服务系统的服务注册、发现、监控和管理功能。
SpringCloud 支持多种注册中心: Eureka、Consul、Zookeeper、Nacos。
这里我们先选择 Eurake 作为注册中心,后面会讲解 SpringCloud Alibaba 的 Nacos。
1.在父工程下面新建子 Module,这里命名为 eureka-server
2.引入依赖:
3.配置 application.yml:
4.SpringBoot 启动类增加注册中心的注解:
启动项目之后发现报错:
报错原因:
eureka 组件包含 server 和 client。server 是一个服务注册中心,主要用来注册客户端,client 是服务的客户端。启动项目之后,Eureka 会把自己当做服务的客户端,然后自己注册自己。
当项目启动时注册中心还没有创建好,所以 client 找不到注册中心就直接报错了。
这里我们可以关闭 Eureka 自己注册自己:
再次启动,访问注册中心的网址:
接下来我们开发 Eureka 的客户端,也就是每一个服务:
5.在父项目下分别创建两个 SpringBoot 项目:product-service 和 user-service。
然后分别引入两个依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
6.分别配置 application.yml
其中 spring.application.name 为每个服务的名称
然后在每个启动类上添加 Eureka 客户端的注解:
刷新注册中心的网址,发现成功注册了两个服务:
5.服务通信组件
前面我们先开发了一个服务注册中心,然后向注册中心注册了两个服务:user-service 和 product-service。
那这两个服务之间如何通信呢?
你可能会说这两个服务不是在一个项目上吗?不是可以直接通信吗?
切记!不要被表面现象迷惑!
首先这两个服务都是 SpringBoot 项目,而 SpringBoot 项目内嵌 tomcat 服务器,所以这两个服务最后都需要打成 jar 包,然后放在不同的服务器上运行。
所以接下来要解决的问题就是两个服务器上运行的 SpringBoot 项目如何通信?
Feign 组件闪亮登场。
Feign 是声明式的 web service 客户端,它让微服务之间的调用变得更简单了,就好像你在 controller 层调用 service 层一样丝滑。
接下来讲一下如何使用 Feign 组件实现服务间的通信:
1.user-service 服务
新增 UserController
2.product-service 服务
1.新增 feign 依赖:
2.启动类开启 feign 注解:
3.引入 user 服务的 feign 接口:
4.注入 feign 接口,然后在 Controller 调用
3.总结
如何在一个服务里面通过 feign 组件调用另外一个服务的方法?比如在 product 服务里面调用 user 服务的方法?
1.在 product 服务 里面引入 Feign 的依赖
2.在 product 服务的启动类上面开启 Feign 注解
3.开发 user 服务的 Feign 接口
- 指明要调用的是哪个服务
- 调用方法路径、参数要和 user 服务保持一致
4.在 product 服务中引入 user 服务的 Feign 接口,并调用该服务的方法
6.服务网关
说起网关,大家第一反应应该会想到家里的路由器。
路由器主要用来连接不同网络,在网络间起网关的作用。
而微服务的网关在整个微服务架构中扮演了很多重要角色:
- 1.请求转发网关的第一个特点就是对请求进行转发,根据不同的请求头、请求参数等,将请求转发到不同的服务上。
- 2.限流限制用户访问次数等。
- 3.认证认证用户信息
接下来我们讲解 Spring Cloud 的网关组件:gateway
1.在父项目下面新建 moudle 子模块:gateway
2.引入依赖:
3.配置 application.yml
其中 routers 就是路由转发
- id: 服务的名字
- uri: 要转发的服务
- predicates: 请求路径
lb:// 表示负载均衡
通过网关统一访问其他服务:
猜你喜欢
- 2025-05-30 分布式RPC最全详解(图文全面总结)
- 2025-05-30 你还以为码农仅仅是自嘲吗?
- 2025-05-30 开源数字货币交易所开发学习笔记(2)——SpringCloud
- 2025-05-30 企业开发必备的6个Spring Cloud微服务开源项目
- 2025-05-30 Spring 云微服务的组件测试
- 2025-05-30 springCloud网关Zuul和GateWay区别
- 2025-05-30 软件系统如何设计可扩展架构?方法论,Java实战代码
- 2025-05-30 Java七大热门技术框架源码解析(完结)
- 2025-05-30 大白话详解Spring Cloud服务降级与熔断
- 2025-05-30 基于layui+springcloud的企业级微服务框架
你 发表评论:
欢迎- 05-30springboot 集成redisson 以及分布式锁的使用
- 05-30去哪儿技术面:10亿数据如何最快速插入MySQL?
- 05-30redis介绍
- 05-30redission YYDS
- 05-30手把手教你springboot集成mybatis
- 05-30mybatis根据表逆向自动化生成代码:自动生成实体类、mapper文件
- 05-30越来越大的微信小程序
- 05-30SpringBoot之数据访问——访问SQL数据库!
- 416℃用AI Agent治理微服务的复杂性问题|QCon
- 416℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 396℃初次使用IntelliJ IDEA新建Maven项目
- 394℃Maven技术方案最全手册(mavena)
- 389℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 386℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 384℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 383℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)