SpringCloud

SpringCloud技术栈
注册中心:eureka(闭源)、zookeeper、consul、nacos
服务调用:ribbon、openFeign
服务降级:hystrix、resilience4j、sentienl
服务网关:zuul(阻塞异步)、zuul2(未整合)、gateway(非阻塞异步)
服务配置:config、nacos
服务总线:bus、nacas

一、注册中心

1、eureka配置(AP架构)

eureka虽然2.x版本闭源了,但是1.x版本依旧可以使用,下面列出eureka的常规配置,可根据自己的需要进行修改

1.1、添加eureka依赖

客户端:

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

服务端:

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

1.2、配置文件

服务端配置文件(application.yml):

server:
  port: 7001
  
eureka:
  instance:
    hostname: eureka7001.com  #eureka服务端的实例名字
  client:
    #表识不向注册中心注册自己
    register-with-eureka: false   
    #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
    fetch-registry: false   
    service-url:
      #设置与eureka server交互的地址,查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7002.com:7002/eureka/
  server:
    #fasle: 表示eureka server7001关闭自我保护机制,保证不可用服务被及时踢除
    enable-self-preservation: false    
    eviction-interval-timer-in-ms: 20000 #自我保护时间

客户端配置文件(application.yml):

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name:  com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db2020
    username: root
    password: root

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
  instance:
    instance-id: payment8001 #主机名称
    prefer-ip-address: true #访问信息有IP信息提示
    #心跳检测与续约时间
    #开发时没置小些,保证服务关闭后注册中心能及时剔除服务
    #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1
    #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 2

1.3、启动类配置

a)服务端启动类需要加上@EnableEurekaServer注解
b)客户端启动类需要加上@EnableEurekaClient注解

2、zookeeper配置(CP架构)

zookeeper是一个分布式协调工具,可以实现注册中心功能;

2.1、安装虚拟机及JDK

(1)安装虚拟机(virtual box、VMware):略
(2)下载CentOS7镜像:略
(3)安装镜像:略
(4)安装JDK及配置环境变量:略
(5)下载zookeeper安装包 https://zookeeper.apache.org/releases.html
在这里插入图片描述
在这里插入图片描述
推荐阿里提供的镜像 https://mirrors.aliyun.com/centos/
可供选择版本:(建议选【DVD】标准版本)
【DVD】标准版本
【Everything】集成所有软件版本
【LiveGNOME】GNOME桌面版本
【LiveKDE】KDE桌面版本
【Minimal】最小安装版本
【NetInstall】网络安装镜像版本
在这里插入图片描述

2.2、搭建zookeeper服务端(单机)

2.2.1、安装zookeeper

使用Xshell连接虚拟机(略)

(1)切换到/opt目录并上传zookeeper安装包

cd /opt   #切换到opt目录
#将zookeeper安装上传到opt目录(直接将安装包拖入)
ls		#查看当前当前目录下的子目录或文件

在这里插入图片描述
(2)解压zookeeper安装包

tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz
ls		#查看当前当前目录下的子目录或文件

在这里插入图片描述
在这里插入图片描述
(3)对解压后的文件(apache-zookeeper-3.6.3-bin)重命名

mv apache-zookeeper-3.6.3-bin zookeeper		#重命名文件
ls		#查看当前当前目录下的子目录或文件

在这里插入图片描述
(4)删除zookeeper压缩包

rm -rf apache-zookeeper-3.6.3-bin.tar.gz	#删除文件
ls		#查看当前当前目录下的子目录或文件 

在这里插入图片描述
(5)创建zoo.cfg文件

cd zookeeper/conf		#切换到zookeeper的配置文件目录下
cp zoo_sample.cfg zoo.cfg		#创建zoo.cfg配置文件
ls		#查看当前当前目录下的子目录或文件

在这里插入图片描述

2.2.2、启动zookeeper

(1)切换到bin目录

cd /opt/zookeeper/bin		#切换到zookeeper的bin目录
ls		#查看当前当前目录下的子目录或文件

在这里插入图片描述
(2)查看zookeeper启动状态

./zkServer.sh status  #查看状态  start:启动;stop:停止;status:运行状态

在这里插入图片描述
(3)启动zookeeper

./zkServer.sh start

在这里插入图片描述
(4)客户端连接测试

./zkCli.sh

在这里插入图片描述
若是连接不成功,看看是不是端口被占用

2.3、搭建zookeeper集群(略)

3、consul配置(CP架构)

3.1、下载consul

官方下载网址:https://www.consul.io/downloads

3.2、安装consul

(1)构建consul目录

mkdir /opt/consul  #创建目录consul
cd /opt/consul	#切换到consul目录
unzip	#确认安装了unzip

在这里插入图片描述
(2)上传并解压consul安装包

unzip consul_1.10.2_linux_amd64.zip  #解压安装包

在这里插入图片描述
在这里插入图片描述

3.3、启动consul

关闭防火墙

systemctl stop firewalld

启动consul

./consul agent -dev -ui -node=consul-dev -client=192.168.179.131   #启动consul

访问: http://192.168.179.131:8500

二、服务调用

1、Ribbon(客户端负载均衡)

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。
简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。

1.1、Ribbon架构说明

在这里插入图片描述

Ribbon在工作时分成两步:
第一步先选择EurekaServer ,它优先选择在同一个区域内负载较少的server。
第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。

1.2、使用Ribbon

(1)添加依赖
Eureka依赖整合Ribbon,可以不用另外在引入Ribbon依赖

<dependency>
    <groupld>org.springframework.cloud</groupld>
    <artifactld>spring-cloud-starter-netflix-ribbon</artifactid>
</dependency>

(2)构建RestTemplate(调用服务)

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced  //使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
(3)自定义负载均衡策略

@Configuration
public class MySelfRule {
    @Bean
    public IRule myRule(){
//        new RetryRule()
//        new RoundRobinRule() //轮询
        return new RandomRule();//随机
    }
}

官方文档明确给出了警告:
这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,
否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了。
@SpringBootApplication注解查看源码发现有@ComponentScan注解,所以规则类不能放在启动类的所在包及子包下
在这里插入图片描述
Ribbonf负载均衡策略:

a、RoundRobinRule:轮询
b、RandomRule:随机
c、RetryRule:先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重
d、WeightedResponseTimeRule:权重,响应速度越快的实例选择权重越大,越容易被选择
e、BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
f、AvailabilityFilteringRule:先过滤掉故障实例,再选择并发较小的实例
g、ZoneAvoidanceRule:默认规则,复合判断server所在区域的性能和server的可用性选择服务器

Ribbon轮询算法原理:

rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标
每次服务重启动后rest接口计数从1开始。

(4)主启动类添加@RibbonClien注解

@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)//使用自定义负载均衡方式
public class OrderMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain9001.class,args);
    }
}

2、OpenFeign

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
Feign和OpenFeign的区别:

FeignOpenFeign
Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端;Feign内置了Ribbon,用来做客户端负载均衡;Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等。OpenFeign的@Feignclient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

2.1、OpenFeign使用

(1)添加依赖

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

(2) 消费端启动类添加@EnableFeignClients注解

@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(OrderFeignMain9001.class,args);
    }
}

(3)业务逻辑 Service 接口添加@FeignClient注解

@Component
@FeignClient("CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
    @PostMapping(value = "/provider/getPayment")
    CommonResult<Payment> getPayment(@RequestBody Payment payment);

    @GetMapping(value = "/provider/feign/timeout")
    String paymentFeignTimeout();
}

OpenFeign的@Feignclient可以解析SpringMVC的注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

2.2OpenFeign超时控制

在yml文件中配置

#设置feign客户端超时时间(OpenFeign默认支持ribbon)(单位:毫秒)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

2.3 OpenFeign日志打印

Feign提供了日志打印功能,我们可以通过配置来调整日恙级别,从而了解Feign 中Http请求的细节。就是对Feign接口的调用情况进行监控和输出.
(1)配置日志bean

@Configuration
public class FeignConfig {
//    NONE:默认的,不显示任何日志;
//    BASIC:仅记录请求方法、URL、响应状态码及执行时间;
//    HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
//    FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

(2)YML文件里需要开启日志的Feign客户端

logging:
  level:
    # feign日志以什么级别监控哪个接口
    com.tedu.cloud.service.PaymentFeignService: debug
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值