Springcloud笔记

目录

1.Eureka注册中心

1.搭建Eureka

2. 服务注册

3. 服务发现

 2.Ribbon负载均衡

1.负载均衡原理

1.负载均衡流程

2.负载均衡原理

2.负载均衡策略

3. 饥饿加载

3.Nacos注册中心

3.1 Nacos服务搭建

3.1.1 Nacos概述

3.1.2 Nacos安装

3.2 Nacos服务注册和发现

3.3 Nacos服务分级存储模型

3.4 NacosRule负载均衡

3.5 Nacos环境隔离

3.6 Nacos和Eureka的对比

4.Nacos配置管理

4.1 统一配置管理


 

1.Eureka注册中心

1.搭建Eureka#

1、创建项目,引入spring-cloud-starter-netflix-eureka-server依赖

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

2、编写启动类,类上添加注解@EnableEurekaServer

//开启自动配置
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

3、创建application.yml配置文件,编写配置(配置eureka地址)

server:
  port: 10086  #服务端口
spring:
  application:
    name: eurekaserver  #eureka的服务名称
eureka:
  client:
    service-url: #eureka的地址信息
      defaultZone: http://localhost:10086/eureka

2. 服务注册#

将我们的服务提供者user-service服务注册到EurekaServer步骤如下:

1、在user-service项目中导入spring-cloud-starter-netflix-eureka-client的依赖

<!-- eureka客户端依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2、在application.yml中配置eureka地址

spring:
  application:
    name: userservice  #user服务的名称
eureka:
  client:
    service-url: #eureka的地址信息
      defaultZone: http://localhost:10086/eureka

将我们的服务消费者order-service服务注册到EurekaServer步骤同上。

无论是提供者还是消费者,都引入eureka-client依赖,知道了eureka地址后,在配置文件中进行配置,都可以完成服务注册。

3. 服务发现#

服务拉取是基于服务名称来获取服务列表,然后在对服务列表进行负载均衡算法。

1、在order-service完成服务拉取

  1. 修改order-service中的url访问路径,用服务名代替ip,端口
String url = "http://userservice/user/"+order.getUserId();

     2.在order-service的启动类中的RestTemplate添加负载均衡注解@LoadBalanced

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

 2.Ribbon负载均衡

1.负载均衡原理#

1.负载均衡流程#

2.负载均衡原理#

2.负载均衡策略#

Ribbon负载均衡的接口是IRule,默认实现是ZoneAvoidanceRule,即根据Zone选择服务列表,然后轮询。

通过定义IRule的实现可以修改负载均衡规则,有两种方式:

  1. 代码方式,即在消费者order-service的主程序类中,定义一个新的IRule。(全局配置,对所有服务都有效)
/*
修改负载均衡规则为RandomRule
*/
@Bean
public IRule randomRule(){
	return new RandomRule();
}
  1. 配置文件方式,在order-service的配置文件中,添加新的配置(这种方式只对向某个服务发送请求有效)
userservice: #服务提供者的名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则

3. 饥饿加载#

Ribbon默认采用懒加载,即第一次访问时才会创建RibbonLoadBalancerClient,请求时间会很长。

而饥饿加载则会在项目启动时就创建,减少第一次访问的时间,通过添加配置开启饥饿加载。

ribbon:
  eager-load:
    clients: #指定按饥饿加载的服务名称
      -userservice
    enabled: true #开启饥饿加载

3.Nacos注册中心

3.1 Nacos服务搭建#

3.1.1 Nacos概述#

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎度更高

3.1.2 Nacos安装#

1、下载安装包

2、解压( 解压到任意非中文目录下 )

3、端口配置

  • Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
  • 如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:

4、启动

  • 启动非常简单,进入bin目录,然后执行命令即可:windows命令:startup.cmd -m standalone

5、访问

  • 在浏览器输入地址:http://127.0.0.1:8848/nacos即可
  • 默认的账号和密码都是nacos

3.2 Nacos服务注册和发现#

1、引入Nacos依赖

  1. 在父工程中导入依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
  1. 在每个服务模块中导入Nacos依赖(记得先将之前的Eureka客户端依赖注释掉)
<!-- Nacos客户端依赖包 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

2、在配置文件中,配置Nacos地址(记得先将之前的Eureka配置注释掉)

spring:
  application:
    name: orderservice  #order服务的名称
  cloud:
    nacos:
      server-addr: localhost:8848 #Nacos服务地址

3.3 Nacos服务分级存储模型#

Nacos将多个实例按照地域划分为集群,是为了防止出现服务跨集群调用问题。

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高。

当本地集群不可访问时,再去调用其他集群。

1、Nacos服务分级存储模型

  1. 一级是服务,例如userservice服务,一个服务有多个实例(实例的端口不同)
  2. 二级是集群,例如上海集群或杭州集群
  3. 三级是实例,例如user-service01,user-service02,杭州机房的某台部署了userservice的服务器

2、配置实例的集群属性

  • 修改application.yml配置文件,添加配置即可
spring:
  application:
    name: userservice  #user服务的名称
  cloud:
    nacos:
      server-addr: localhost:8848 #Nacos服务地址
      discovery:
        cluster-name: HZ #配置集群名称,HZ表示杭州

3.4 NacosRule负载均衡#

为了让服务消费者orderservice去调用userservice服务时优先调用本地集群的服务,所以需要给消费者也配置集群属性。

1、根据集群设置负载均衡规则

  1. 修改orderservice的配置文件,设置集群属性
spring:
  application:
    name: orderservice  #order服务的名称
  cloud:
    nacos:
      server-addr: localhost:8848 #Nacos服务地址
      discovery:
        cluster-name: HZ #配置集群名称,HZ表示杭州
  1. 在orderservice的配置文件中设置负载均衡的Rule为NacosRule,这个规则:优先寻找与自己同集群的服务,然后在集群内做随机调用。
userservice: #服务提供者的名称
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则(根据集群设置)

2、根据权重设置负载均衡:

在实际部署中:服务器设备性能有差异,我们希望性能好的机器承担更多的用户请求。

Nacos提供了权重设置来控制访问频率,权重越大则访问频率越高。

对服务的实例进行权重设置:

  1. Nacos控制台可以设置实例的权重值,0~1之间
  2. 同集群内的多个实例,权重越高则被访问的频率越高
  3. 权重设置为0则完全不会被访问

3.5 Nacos环境隔离#

环境隔离-namespace

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。

1、环境隔离具体步骤:

  1. 在Nacos控制台可以创建namespace,用来隔离不同环境。

  1. 修改配置文件,添加命名空间配置
spring:
  application:
    name: orderservice  #order服务的名称
  cloud:
    nacos:
      server-addr: localhost:8848 #Nacos服务地址
      discovery:
        cluster-name: HZ #配置集群名称,HZ表示杭州
        namespace: 7s1982drui2 #配置命名空间,填ID

注意:

  • 每个namespace都有唯一的ID
  • 不同namespace下的服务不可见(即不可调用)

3.6 Nacos和Eureka的对比#

1、Nacos和Eureka的共同点:

  • 都支持服务注册和服务发现(拉取)
  • 都支持服务提供者做心跳检测

2、Nacos和Eureka的区别

  • Nacos支持服务端主动检测提供者的状态:临时实例采用发送心跳检测给服务端;非临时实例采用服务端主动检测模式
  • 临时实例心跳不正常时会被剔除,而非临时实例不会。
  • Nacos支持服务列表更新时的消息推送模式,即服务端向消费者主动推送消息,服务列表更新更及时。Eureka采用的是定时拉取,即消费者定时向服务端拉取服务列表信息。
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP模式。

4.Nacos配置管理

4.1 统一配置管理#

具体流程:

  1. 在Nacos中添加配置管理文件(配置中心),填写配置
    1. 配置文件ID:[服务名称]-[环境].yaml
    2. 分组,默认即可
  1. 微服务获取Nacos的配置管理文件中的信息(微服务拉取配置)
      1. 引入Nacos的配置管理客户端依赖
<!-- Nacos配置管理依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
      1. 在userservice中的resource目录下创建一个bootstrap.yml文件,这个文件是引导文件,优先级比application.yml高。
      2. 在bootstrap.yml中添加配置,需要配置nacos地址,以及服务名称、当前环境、文件后缀名,这些配置决定了程序启动时去Nacos读取哪个配置文件。(注意将之前在application.yml中的相同配置删除掉)
spring:
  application:
    name: userservice #服务名称
  profiles:
    active: dev #环境,开发环境
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos地址
      config:
        file-extension: yaml #文件后缀名
  1. 当我们更改了Nacos配置管理文件后,微服务可以实现热更新,即无需重启就能感知到。

可以通过两种方式实现:

      1. 通过@Value注解注入,然后结合@RefreshScope来刷新
      2. 通过@Configurationproperties("前缀名")注解,自动刷新

注意:不是所有的配置都适合放在配置中心,维护起来比较麻烦。所以将一些关键参数,需要运行时调整的参数放到Nacos配置中心,一般都是自定义配置。

  1. 多环境配置共享,为了使多个环境将来能够共享相同的配置,所以创建一个多环境共享的配置文件,供不同环境下的微服务共享使用。
      1. 在Nacos中添加配置管理文件,命名规则:[服务名].yaml
      2. 添加共享的配置即可

多种配置文件的优先级:[服务名]-[环境].yaml > [服务名].yaml > 本地配置application.yaml

微服务会从Nacos中读取的配置文件:

1、[服务名]-[环境].yaml 环境配置文件

2、[服务名].yaml 默认配置,即多环境共享配置文件

  1. Nacos集群搭建
      1. 搭建MySQL集群并初始化数据库
      2. 下载解压Nacos
      3. 修改集群配置(节点信息),数据库配置
      4. 分别启动多个Nacos节点
      5. nginx反向代理

作者:jvlearn

出处:https://www.cnblogs.com/jvlearn/p/16829879.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   爱吃番茄jiang  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示