没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一. 搭建简单的微服务工程
1. 从单体架构到微服务架构的演变
我们最先接触的单体架构,整个系统就只有一个工程,打包往往是打成了 war 包,然后部署 到单一
tomcat 上面,这种就是单体架构,如图:
单体架构优点
1、结构简单,部署简单
2、所需的硬件资源少
3、节省成本
缺点
1、版本迭代慢,往往改动一个代码会影响全局
2、不能满足一定并发的访问
3、代码维护困难,所有代码在一个工程里面,存在被其他人修改的风险
随着业务的拓展,公司的发展,单体架构慢慢的不能满足我们的需求,我们需要对架构进行 变动,
我们能够想到的最简单的办法就是加机器,对应用横向扩展。 如图:
这种架构貌似暂时解决了我们的问题,但是用户量慢慢增加后,我们只能通过横向加机器来解决,
还是会存在版本迭代慢,代码维护困难的问题。而且用户请求往往是读多写少的情况, 所以可能真正需
要扩容的只是业务量大的模块而已,而现在是整个工程都扩容了,这无形中是一种资源的浪费,因为其
他模块可能根本不需要扩容就可以满足需求。所以我们有必要对整个工 程按照模块进行拆分,拆分后的
架构图如下:
模块拆分后,模块和模块之间是需要通过接口调用的方式进行通信,模块和模块之间通过分流软件
进行负载均衡。这个架构解决前面的资源浪费问题和代码管理问题,因为我们是对系统拆分了,各个模
块都有单独的工程,比如我修改商品模块,就不需要担心会不会影响购物车模块。但是这种架构扩展非
常麻烦,一旦需要横向加机器,或者减机器都需要修改 nginx 配置,一旦机器变多了以后,nginx 的配
置量就是一个不能完成的工作。OK,这时候 SOA 服 务治理框架就应运而生,架构图如下:
基于注册中心的 SOA 框架,扩展是非常方便的,因为不需要维护分流工具,但我们启动应 用的时
候就会把服务通过 http 的方式注册到注册中心。
在 SOA 框架中一般会有三种角色:1、注册中心 2、服务提供方 3、服务消费方
1、注册中心
在注册中心维护了服务列表
2、服务提供方
服务提供方启动的时候会把自己注册到注册中心
3、服务消费方
服务消费方启动的时候,把获取注册中心的服务列表,然后调用的时候从这个服务列表中选择
某一个去调用。
微服务工程的特点:
1、扩展灵活
2、每个应用都规模不大
3、服务边界清晰,各司其职
4、打包应用变多,往往需要借助 CI 持续集成工具
2. 简单的微服务工程搭建
1、注册中心搭建(eureka服务端: netflix-eureka-server)
Springcloud 中,我们选择 eureka 作为注册中心,springcloud 工程是基于 springboot 工程的。
pom.xml 中 jar 包依赖:
application.properties 配置文件(不能叫bootstrap.properties)
<!--parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--Springcloud 的版本-->
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<!--Eureka 服务端启动器导入-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--Springcloud 的依赖仓库导入-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
server.port=8763
eureka.instance.hostname=localhost
#是否注册到eureka
eureka.client.registerWithEureka=false
#是否从eureka中拉取注册信息
启动类
查看
http://localhost:8763/
2、服务提供方(eureka 客户端: netflix-eureka-client)
Pom 的 jar 包依赖,其他都跟 eureka 服务端是一样的,只是服务提供方要把服务注册到 eureka
服务端,所以服务提供方就是 eureka 的客户端,所以需要导入 eureka 客户端的启动器。
bootstrap.properties
eureka.client.fetchRegistry=false
##暴露eureka服务的地址
# http://localhost:8763/eureka/
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server
.port}/eureka/
#自我保护模式,当出现出现网络分区、eureka在短时间内丢失过多客户端时,会进入自我保护模式,即一个
服务长时间没有发送心跳,eureka也不会将其删除,默认为true
eureka.server.enable-self-preservation=true
#eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
eureka.server.eviction-interval-timer-in-ms=60000
#服务手动下线 delete请求 http://localhost:8763/eureka/apps/MICRO-
ORDER/localhost:xxx:8084
package len.hgy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public interface EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
启动类
3、服务消费方(eureka 客户端: netflix-eureka-client)
pom 和属性配置文件基本上差不多,消费要负责调用服务提供方,所以需要调用客户端
依赖
bootstrap.properties
启动类
spring.application.name=micro-order
server.port=8084
eureka.client.serviceUrl.defaultZone=http://localhost:8763/eureka/
# 一下有默认配置
#服务续约,心跳的时间间隔
eureka.instance.lease-renewal-interval-in-seconds=30
#如果从前一次发送心跳时间起,90秒没接受到新的心跳,讲剔除服务
eureka.instance.lease-expiration-duration-in-seconds=90
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒
eureka.client.registry-fetch-interval-seconds=30
package len.hgy;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication(scanBasePackages = {"len.hgy"})
// 注册到eureka
@EnableEurekaClient
@MapperScan("len.hgy.dao")
public class MicroOrderApplication {
public static void main(String[] args) {
SpringApplication.run(MicroOrderApplication.class, args);
}
}
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
#是否注册到eureka
eureka.client.registerWithEureka=true
#是否从eureka中拉取注册信息
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8763/eureka/
package len.hgy;
剩余120页未读,继续阅读
资源评论
- shandongwill2024-03-10springcloud学习笔记.pdf #内容详尽
岁月玲珑
- 粉丝: 168
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功