首页 > 其他分享 >微服务学习-Ribbon,Nacos

微服务学习-Ribbon,Nacos

时间:2024-04-08 14:00:15浏览次数:25  
标签:spring Nacos nacos 学习 yaml 添加 Ribbon userservice cloud

Ribbon负载均衡

在Eureka的学习中,通过添加注解@LoadBalance进行负载均衡,实现的原理是什么?
请求端发送信息,LoadBalancerInterceptor负载均衡拦截器拦截请求,根据servername去注册中心获取请求地址,使用负载均衡选择调用哪一个。

负载均衡的策略设置

1.代码方式:在请求的启动类中(配置类应该也行)定义一个新的IRule:

@Bean
public IRule randomRule(){
	return new RandomRule();
}

2.配置文件方式:在请求服务的配置文件中添加规则:

userservice:
  ribbon:
    NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule #负载均衡策略
饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true #开启饥饿加载
    clients:
      -userservice

微服务学习-Nacos

一.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>
2.注释掉原先使用eureka的依赖
3.添加nacos的客户段依赖
<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

4.添加配置
  cloud:
    nacos:
      server-addr: localhost:8848

二.Nacos多级存储模型

1.Nacos服务分级存储模型

1.一级是服务,例如userservice。
2.二级是集群,例如北京集群。
3.三级是实例,例如北京部署了userservice的服务器

2.设置集群属性

修改配置文件,添加spring.cloud.nacos.discovery.cluster-name属性

3.根据集群负载均衡

1.修改请求段的配置文件,设置集群

  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ

2.设置负载均衡策略为NacosRule

userservice:
  ribbon:
    NFLoadBalancerRuleClassName:com.netflix.loadbalancer.NacosRule #负载均衡策略(优先访问本地,若本地没有则访问其他集群,从集群中随机挑选)

3.将userservice的权重设置为1

4.根据权重负载均衡

应用场景:减轻性能差的服务器的压力,平滑升级网站

5.环境隔离-namespace

修改配置文件,添加namespace

  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 1 #命名空间的id

三.Nacos配置管理

1.统一配置管理

统一配置管理的配置文件并不是把服务的所有配置都放到这,而是把模式,开关等核心的会变化的配置放置在这。

如何在服务中使用Nacos配置管理

1)引入nacos-config依赖

首先,在user-service服务中,引入nacos-config的客户端依赖:

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2)添加bootstrap.yaml

然后,在user-service中添加一个bootstrap.yaml文件,内容如下:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

2.配置热更新

我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新

要实现配置热更新,可以使用两种方式:

1.2.1.方式一

在@Value注入的变量所在类上添加注解@RefreshScope:

1.2.2.方式二

使用@ConfigurationProperties注解代替@Value注解。

在user-service服务中,添加一个类,读取patterrn.dateformat属性:

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

在UserController中使用这个类代替@Value:
通过Autowire注入,patternProperties.getdateformat获取。

多环境共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

下面我们通过案例来测试配置共享

1)添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:

2)在user-service中读取共享配置

在user-service服务中,修改PatternProperties类,读取新添加的属性:

在user-service服务中,修改UserController,添加一个方法:

配置共享的优先级

服务名-profile.yaml > 服务名称.yaml > 本地配置

标签:spring,Nacos,nacos,学习,yaml,添加,Ribbon,userservice,cloud
From: https://blog.csdn.net/weixin_44122034/article/details/137462423

相关文章

  • 【学习笔记】数论分块
    先看一个例子:给出正整数\(n(n\leq10^{12})\),计算:\[\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\]如果直接暴力,复杂度为\(O(n)\),无法在1s内通过,但使用数论分块(整除分块)可以将复杂度降至\(O(\sqrt{n})\)。先看个例子,当\(n=100\)时,\(i\)和\(\lfloor\frac{n}{i}\r......
  • 一起学习python——基础篇(7)
    今天讲一下python的函数。函数是什么?函数是一段独立的代码块,这块代码是为了实现一些功能,而这个代码块只有在被调用时才能运行。在Python中,使用 def关键字定义函数:函数的固定结构就是def(关键字)+函数名字(自己定义)+():deftest_function():#里面的内容一定要有空格(......
  • 基于springboot+vue+Mysql的学习平台
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示平台首页用户注册课程信息作业信息资料信息个人中心管理员功能界面学生管理教师管理课程......
  • 广义表的学习
    广义表的定义:广义表(GeneralizedList)是一种数据结构,它是线性表的推广。线性表是由零个或多个元素组成的有限序列,而广义表可以包含原子元素(即非广义表的元素)和子表(即广义表),这使得广义表能够表示更加复杂的数据结构。广义表(Lists,又称列表)是一种非连续性的数据结构,是线性表的一......
  • 联合学习MOON——无需共享原始数据,通过模型对比联合学习实现准确的图像分类
    1.概述联合学习(FederatedLearning)是一种分布式的机器学习方法,它允许多个参与者协作训练一个共享的模型,同时保持各自数据的隐私性。这种方法特别适用于那些涉及敏感数据的场景,如医疗、金融和个人设备等。在传统的中心化机器学习方法中,所有的数据需要被收集到一个中心服务......
  • 前端学习<四>JavaScript基础——11-流程控制语句:选择结构(if和switch)
    代码块用{}包围起来的代码,就是代码块。在ES5语法中,代码块,只具有分组的作用,没有其他的用途。代码块中的内容,在外部是完全可见的。举例: {   vara=2;   alert('qianguyihao');   console.log('千古壹号'); } ​ console.log('a='+a);打印结......
  • 前端学习<四>JavaScript基础——10-运算符
    我们在前面讲过变量,本文讲一下运算符和表达式。运算符的定义和分类运算符的定义运算符:也叫操作符,是一种符号。通过运算符可以对一个或多个值进行运算,并获取运算结果。表达式:数字、运算符、变量的组合(组成的式子)。表达式最终都会有一个运算结果,我们将这个结果称为表达式的......
  • PCB学习记录-----入门&基础知识
    一、搭建环境1.下载嘉立创EDA 软件下载-嘉立创EDA(lceda.cn)选专业版在线编辑:嘉立创EDA(专业版)-V2.1.45(lceda.cn)官方教程:立创EDA专业版-使用教程(lceda.cn)2.新建工程文件-新建-项目,右键Board1可以重命名,原理图右键新增图页右侧图纸尺寸可自定义调整图纸......
  • 吴恩达2022机器学习专项课程(一) 5.5 特征缩放1 & 5.6 特征缩放2
    问题预览/关键词什么是特征缩放?作用是什么?特征尺度和参数w权重的关系是?算法为什么要调节w权重?不进行特征缩放对梯度下降的影响?有特征缩放对梯度下降的影响?实现特征缩放的三种方法是?如何实现最大值缩放?如何实现均值归一化?如何实现Z-score标准化?判断缩放成功的标准是?什么情况......
  • 从零开始的深度学习项目(PyTorch识别人群行为)
    PyTorch识别人群行为系统环境介绍环境版本Python3.11.5pandas2.0.3numpy1.24.3torch2.1.2+cu121注意:2.1.2+cu121这样的版本号通常用于描述TensorFlow等深度学习框架的版本信息,其中:2.1.2是TensorFlow的主要版本号,表示主要的功能和接口的变化。cu121表示该Tenso......