SpringCloud微服务

1、什么是微服务?

        就是将一个大的应用拆分为多个小的模块,每个模块都有自己的功能和职责,不同模块之间可以进行交互,这就是微服务

2、六大基础原则

职责单一、服务独立、可扩展、可替换、可重用、高容错

Springcloud的五大组件

Eureka 服务注册与发现

Ribbon 负载均衡

Hystrix 熔断器

Gateway 网关

Nacos 配置中心

一、Eureka 服务与注册中心(AP)

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务(CP)

1、使用方式(服务的注册)
(1)启动器

 spring-cloud-starter-netfix-eureka-server

(2)配置文件application.properties

服务端的配置文件

# 服务端端口
server.port=8761
# 服务端应用名称
spring.application.name=eureka-server
# 服务端每隔10s定期删除不与服务端联系的客户端
eureka.server.evication.interval.time.in.ms=10000
# 续约百分比 超过阈值(85%)的应用没有和服务端续约,则eureka会保护服务,不会删除任何客户端
eureka.server.renewal.percent.threshold=0.85

客户端的配置文件

# 应用端口
server.port=8080
# 应用名称
spring.application.name=eureka-client
# 指定注册的地址
eureka.client.service.url.defaultZone:hppt://localhost:8761/eureka
# 可以不往服务端注册
eureka.client.register.with.eureka=true
# 客户端是否去服务端拉取服务列表
eureka.client.fetch.registry=true
# 客户端每隔10s去服务端拉取服务列表,缓解脏读问题,时间越小,脏读越少,性能消耗越大
eureka.client.registry.fetch.interval.seconds=10
(3)启动类添加注解

服务端启动类添加的注解

@EnableEurekaServer

客户端启动类添加的注解

@EnableEurekaClient
2、注册中心集群(去中心化模式,更加高可用)

去中心化模式中没有主从的概念,eureka会将数据进行广播和扩散

# 服务端端口1
server.port=8761
# 服务端应用名称
spring.application.name=eureka-server
eureka.client.service.url.defaultZone:hppt://localhost:8762/eureka,hppt://localhost:8763/eureka
# 服务端每隔10s定期删除不与服务端联系的客户端
eureka.server.evication.interval.time.in.ms=10000
# 续约百分比 超过阈值(85%)的应用没有和服务端续约,则eureka会保护服务,不会删除任何客户端
eureka.server.renewal.percent.threshold=0.85
-------------------------------------------------
# 服务端端口2
server.port=8762
# 服务端应用名称
spring.application.name=eureka-server
# 指定注册的地址
eureka.client.service.url.defaultZone:hppt://localhost:8761/eureka,hppt://localhost:8763/eureka
# 服务端每隔10s定期删除不与服务端联系的客户端
eureka.server.evication.interval.time.in.ms=10000
# 续约百分比 超过阈值(85%)的应用没有和服务端续约,则eureka会保护服务,不会删除任何客户端
eureka.server.renewal.percent.threshold=0.85
-------------------------------------------------
# 服务端端口3
server.port=8763
# 服务端应用名称
spring.application.name=eureka-server
# 指定注册的地址
eureka.client.service.url.defaultZone:hppt://localhost:8761/eureka,hppt://localhost:8762/eureka
# 服务端每隔10s定期删除不与服务端联系的客户端
eureka.server.evication.interval.time.in.ms=10000
# 续约百分比 超过阈值(85%)的应用没有和服务端续约,则eureka会保护服务,不会删除任何客户端
eureka.server.renewal.percent.threshold=0.85
3、服务的发现
@RestController
public class DiscoveryController {
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("test")
    public String doDiscovery(String serviceName) {
        // 服务发现
        List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);
        //
    }
}
二、Ribbon 负载均衡
1、实现原理

        一个URL请求过来,ribbon如何做到负载均衡

        (1)拦截请求

        (2)截取主机名称

        (3)借助eureka来做服务发现

        (4)通过负载均衡算法,拿到一个服务器的IP和端口

        (5)重构URL

        (6)发起请求

        只要在发起请求的RestTemplate类上面加上@LoadBlanced即可让Ribbon托管,通过轮询的负载均衡算法进行请求

2、feign 远程调用

(1)在启动类添加@EnableFeignClients,开启feign的客户端功能,才可以帮助我们发起远程调用

(2)远程调用接口

// value是服务提供者的应用名称
@FeignClient(value = "order-service")
public interface UserOrderFeign {
    // 远程调用服务的方法签名
    @GetMapping("doOrder")
    public String doOrder();
}

(3)直接使用@Autowired注入,就可以使用远程服务方法了

@Autowired
private UserOrderFeign userOrderFeign; 
三、Hystrix 熔断器
1、服务雪崩

服务雪崩的核心本质是线程没有及时回收

        客户端去请求A的服务,A的tomcat会分配一个线程支持用户的访问,A需要去调用B的服务,B需要去调用C的服务,服务C挂了,B不知道,AB依旧去访问C,导致A和B得线程都没有回收,此时大量请求进入AB服务,AB会报错,整个业务线都瘫痪,服务雪崩

2、简介

        熔断器在正常情况下,熔断器是关着的,只有出了问题才打开;

        熔断器是用来保护微服务不雪崩的方法,能够阻止分布式系统中出现联动故障。

        当有服务发生调用的时候才会发生服务雪崩,所以hystrix常和feign,ribbon一起使用;        

3、实现步骤

(1)POM文件导入需要的依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

(2)写远程服务调用接口的实现类,需要在实现类上加@Component注解,加入IOC容器,用于spring管理,创建Bean

(3)客户端配置文件中启动熔断

# 应用端口
server.port=8080
# 应用名称
spring.application.name=eureka-client
# 指定注册的地址
eureka.client.service.url.defaultZone:hppt://localhost:8761/eureka
# 可以不往服务端注册
eureka.client.register.with.eureka=true
# 客户端是否去服务端拉取服务列表
eureka.client.fetch.registry=true
# 客户端每隔10s去服务端拉取服务列表,缓解脏读问题,时间越小,脏读越少,性能消耗越大
eureka.client.registry.fetch.interval.seconds=10
#开启熔断
feign.hystrix.enabled=true

(4)指定远程服务调用失败走那个方法

// value是服务提供者的应用名称 CustomerFrignHystrix是CustomerFrign的实现类
@FeignClient(value = "order-service", fallback=CustomerFrignHystrix.class)
public interface CustomerFrign{
    // 远程调用服务的方法签名
    @GetMapping("rent")
    public String rent();
}
四、Gateway 网关
1、作用

网关是微服务最边缘的服务,直接暴露给用户,用来做用户和微服务的桥梁

        (1)路由转发

        (2)安全控制,保护每个服务,不需要将每个服务的端口暴露出去

        (3)负载均衡

2、核心逻辑

路由转发+执行过滤器链

3、nginx 和 gateway

nginx是服务器级别的网关,gateway是项目级别的网关,一个服务器上可以部署多个项目

4、实现步骤

(1)导入依赖,网关默认开启,需要在配置文件中配置网关的端口

        gateway-server

五、Nacos 配置中心

NacosServer是需要安装的,我们不需要配置,只需要将服务注册上NacosServer就行

版本发布的时候会有特定的人去做,我们需要做的就是去Nacos上建立相应的文件,文件夹里面就是我们的配置信息,在进行本地调试的时候

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值