SpringCloud Alibaba - Eureka注册中心,Nacos配置中心

news2024/10/6 8:58:55

Eureka

1、创建服务端

server:
  port: 8761 # eureka 默认端口

spring:
  application:
    name: eureka-server # 应用名称(微服务中建议必须定义应用名称)

@SpringBootApplication
@EnableEurekaServer // 开启eureka注册中心功能
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

2、创建客户端 

# 应用服务 WEB 访问端口
server:
  port: 8080

spring:
  application:
    name: eureka-client-a

eureka:
  client:
    service-url: # 指定注册地址
      defaultZone: http://localhost:8761/eureka
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientBApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientBApplication.class, args);
    }

}

# 应用服务 WEB 访问端口
server:
  port: 8081

spring:
  application:
    name: eureka-client-b

eureka:
  client:
    service-url: # 指定注册地址
      defaultZone: http://localhost:8761/eureka

 服务端(注册中心)配置

服务端(注册中心)配置需要考虑的问题:

  • 在注册中心维护一个容器列表,保存服务应用的信息
  • 应用下线以后,及时从容器中移除
  • 应用之间访问应该向注册中心缓存一份服务列表,但是如何避免脏读问题
server:
  port: 8761 # eureka 默认端口

spring:
  application:
    name: eureka-server # 应用名称(微服务中建议必须定义应用名称)

# eureka 配置分为三类:server client 实例
eureka:
  server:
    eviction-interval-timer-in-ms: 10000 # 服务端每隔10s做定期删除工作(删除过期服务)
    renewal-percent-threshold: 0.85 # 续约百分比阈值(超过85%的服务没有续约,那么eureka会保护服务 不糊剔除任何一个)
  instance: # 实例的配置
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} # 主机名称:应用名称:端口号
    hostname: localhost # 主机名称或者服务的ip
    prefer-ip-address: true # 以 ip 的形式显示具体的服务信息
    lease-renewal-interval-in-seconds: 5 # 实例的续约时间间隔

客户端配置

# 应用服务 WEB 访问端口
server:
  port: 8080

spring:
  application:
    name: eureka-client-a

eureka:
  client:
    service-url: # 指定注册地址
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true # 可以不向 eureka 注册服务
    fetch-registry: true # 是否缓存一份服务列表到本地
    registry-fetch-interval-seconds: 10 # 拉取的时间间隔(缓解服务列表脏读的问题)
  instance:
    hostname: localhost # 主机或ip
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
    prefer-ip-address: true # 显示ip
    lease-renewal-interval-in-seconds: 10 # 续约的时间

构建 eureka-server 集群

        eureka 是一种非主从模式的去中心化的集群模式,多个节点之间互相注册同步自己的服务列表;下面我们除了上面创建好的 eureka-server(8761),再创建两台服务端(注册)节点:

  • 需要在这3个服务端都配置注册地址(添加除自己之外的注册地址,相当于把自己当做一个 client)

创建 eureka-server-b:

server:
  port: 8762 # eureka 默认端口

spring:
  application:
    name: eureka-server # 应用名称(微服务中建议必须定义应用名称)

# eureka 配置分为三类:server client 实例
eureka:
  instance: # 实例的配置
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} # 主机名称:应用名称:端口号
    hostname: localhost # 主机名称或者服务的ip
    prefer-ip-address: true # 以 ip 的形式显示具体的服务信息
    lease-renewal-interval-in-seconds: 5 # 实例的续约时间间隔
  client:
    service-url: # 指定注册地址
      defaultZone: http://localhost:8761/eureka,http://localhost:8763/eureka

创建 eureka-server-c: 

server:
  port: 8763 # eureka 默认端口

spring:
  application:
    name: eureka-server # 应用名称(微服务中建议必须定义应用名称)

# eureka 配置分为三类:server client 实例
eureka:
  instance: # 实例的配置
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} # 主机名称:应用名称:端口号
    hostname: localhost # 主机名称或者服务的ip
    prefer-ip-address: true # 以 ip 的形式显示具体的服务信息
    lease-renewal-interval-in-seconds: 5 # 实例的续约时间间隔
  client:
    service-url: # 指定注册地址
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

给 eureka-server-b 和 eureka-server--c 添加注解: @EnableEurekaServer

Nacos 和 Eureka 区别:

  • nacos 有命名空间的概念来隔离不同项目中相同的服务名称,但是 eureka 并不能隔离开(可以通过服务名称拼接项目名称的方式来隔离)

修改 application.yml:

server:
  port: 8080

spring:
  application:
    name: nacos-client-a
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 向这个地址注册自己
        username: nacos
        password: nacos

添加 @EnableDiscoveryClient 注解: 

@SpringBootApplication
@EnableDiscoveryClient // 开启服务发现客户端
public class NacosClientAApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosClientAApplication.class, args);
    }

}

注意 SpringBoot 和 SpringCloud Alibaba 版本对应 :版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

配置中心

1、nacos 创建配置:

2、编写 SpringBoot配置文件 bootstrap.yml:

server:
  port: 8081

spring:
  application:
    name: nacos-config-a
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        prefix: nacos-config-a # dataId 默认选择 spring.application.name
        file-extension: yml # 配置文件的格式
#        namespace: # 默认 public
#        group: # 默认 DEFAULT_GROUP

这里的 prefix 就相当于是 data id (应用名称),将来就是配置文件的名称

3、编写测试类 

注意:这里写得并不标准,实际开发中的写法看下面的动态配置刷新章节

@RestController
public class TestController {

    @Value("${hero.name}")
    private String name;

    @Value("${hero.age}")
    private Integer age;

    @Value("${hero.address}")
    private String address;

    @GetMapping("/info")
    public String getInfo(){
        return name+":"+age+":"+address;
    }

}

 4、测试

动态配置刷新

实现配置动态刷新很简单,添加注解 @RefreshScope 即可,具体添加的位置:

如果是上面的代码,可以直接添加在 controller 类上,因为下面就是我们的配置属性:

@RestController
@RefreshScope
public class TestController {

    @Value("${hero.name}")
    private String name;

    @Value("${hero.age}")
    private Integer age;

    @Value("${hero.address}")
    private String address;

    @GetMapping("/info")
    public String getInfo(){
        return name+":"+age+":"+address;
    }

}

但是我们一般会添加在配置类Bean上面: 

1、编写配置类

上面我们直接在 controller 中使用 @Value 来读取配置,实际开发中我们一般会单独创建一个配置类。创建 config 包,并创建 Hero 这个配置类:

1.1、写法1(推荐)

这里我们使用 @ConfigurationProperties + @Component 实现配置类的注入

package com.lyh.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@RefreshScope
@ConfigurationProperties(prefix = "hero")
public class Hero {
    private String name;

    private Integer age;

    private String address;
}

使用 @ConfigurationProperties 注解需要添加该依赖: 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

 

 1.2、写法2

使用 @Value + @Component 实现自动注入

package com.lyh.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@RefreshScope
public class Hero {
    @Value("${hero.name}")
    private String name;

    @Value("${hero.age}")
    private Integer age;

    @Value("${hero.address}")
    private String address;
}

2、编写 controller

@RestController
public class TestController {

    @Autowired
    private Hero hero;

    @GetMapping("/info")
    public String getInfo(){
        return hero.getName()+":"+hero.getAge()+":"+hero.getAddress();
    }

}

 3、测试即可

配置回滚

配置文件的读取方式

nacos 配置中心通过 namespace,dataId 和 group 来唯一确定一条配置。

  • namespace:默认 public
  • dataId:配置文件名称
  • group:组别,默认是 DEFAULT_GROUP

其中,dataId 是最重要的配置,格式为:

${prefix}-${spring.profiles.active}.${file-extension}

注意:在web控制台在写 dataId 时一定要添加文件类型后缀,比如:nacos-config-dev.yml

一个项目中读取多个配置文件(extension-configs)

注意:目前一个项目中要读取多个配置文件只支持在一个命名空间下!

如何读取相同 命名空间下不同组的配置文件:

 编辑配置:

共享配置文件(shared-configs)

        比如多个项目都需要操作同一个数据源(比如 mybatis,redis),那么我们可以通过共享配置文件把数据源统一进行管理。

        现在我们在 nacos 创建一个共享文件:application.yml 。

写法1(不能修改 group,只能在默认组):

server:
  port: 8082
spring:
  application:
    name: nacos-config-test
  cloud:
    nacos:
      config:
        namespace: 19519eb4-c512-4907-9127-9bda8a575125
        group: A_GROUP
        username: nacos
        password: nacos
        server-addr: localhost:8848
        file-extension: yml
        prefix: user-center
        shared-configs:
          - application-dev.yml # 这种写法只能在 DEFAULT_GROUP
  profiles:
    active: dev

写法2(可以修改组)

server:
  port: 8082
spring:
  application:
    name: nacos-config-test
  cloud:
    nacos:
      config:
        namespace: 19519eb4-c512-4907-9127-9bda8a575125
        group: A_GROUP
        username: nacos
        password: nacos
        server-addr: localhost:8848
        file-extension: yml
        prefix: user-center
        shared-configs:
          - dataId: application-dev.yml
            group: A_GROUP
            refresh: true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二分查找一>山脉数组的峰顶索引

1.题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int peakIndexInMountainArray(int[] arr) {int left 1, right arr.length-2;while(left < right) {int mid left (right-left1) / 2;if(arr[mid] > arr[mid-1]) left mid;else right mid-1;}ret…

【记录】Excel|Excel 打印成 PDF 页数太多怎么办

【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题 文章目录 【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题方法一&#xff1a;调整页边距WPS OfficeMicrosoft Excel 方法二&#xff1a;优化页面布局调整列宽和行高使用“页面布局”视图合并单…

Markdown实用语法汇总

说明&#xff1a; 本来只展示本人常用的、markdown特有优势的一些语法。表格输入markdown的弱项&#xff0c;不作介绍&#xff0c;借助软件创建即可。引用图片、音频、视频等&#xff0c;虽然很方便&#xff0c;但是内容集成度不高&#xff0c;需要上传发布的时候很不方便&…

[单master节点k8s部署]29.Istio流量管理(五)

测试istio熔断管理。 采用httpbin镜像和fortio镜像&#xff0c;其中httpbin作为服务端&#xff0c;fortio是请求端。这两个的配置yaml文件都在istio的samples/httpbin目录下&#xff0c;fortio的配置文件在samples-client目录下。 [rootmaster httpbin]# ls gateway-api ht…

七、Drf版本组件

七、版本组件 7.1基于GET请求 #url.py urlpatterns [ path(home/,views.HomeView.as_view(),namehome), ]#setting.py REST_FRAMEWORK {#定义版本号的名称&#xff0c;默认为versionVERSION_PARAM:version, #允许的版本号值&#xff0c;如果前端传递过来的版本号的值不在…

工具使用总结之(三) SecureCRT 设置日志自动保存

SecureCRT工具设置日志自动保存方法 1、双击打开SecureCRT工具 2、打开依次打开选项-》会话选项-》日志文件 3、按照如下截图方法进行配置&#xff0c;然后确定保存即可 [%Y%M%D_%h:%m:%s] [%Y%M%D_%h:%m:%s] [%h:%m:%s.%t]

统一 SASE 架构中的网络和安全融合

网络威胁情报技术的进步 传统的网络边界一片混乱&#xff0c;剩下的只是无人管理的设备、分散在私有云和公共云中的资产、无法读取的应用程序流量泛滥&#xff0c;混合工作结构正在给现有网络的功能带来压力。 更重要的是&#xff0c;这些问题早在生成式人工智能和大型语言模…

Nginx的核心架构和设计原理

Nginx 是一个免费的、开源的、高性能 Http 服务器和反向代理。Nginx 的架构设计是为了提供高性能、稳定性和可扩展性。 Nginx 的主要架构组件和工作原理&#xff1a; 1、Master 进程&#xff1a;Nginx 的运行始于一个 master 进程&#xff0c;它负责管理所有的工作进程。mast…

【C++差分数组】1526. 形成目标数组的子数组最少增加次数|1872

本文涉及知识点 C差分数组 LeetCode1526. 形成目标数组的子数组最少增加次数 给你一个整数数组 target 和一个数组 initial &#xff0c;initial 数组与 target 数组有同样的维度&#xff0c;且一开始全部为 0 。 请你返回从 initial 得到 target 的最少操作次数&#xff0c…

WSL2Linux 子系统(十二)

wsl 子系统安装 cuda 环境 《WSL2Linux 子系统(十一)》讲述 WSL 网络转为桥接模式的两种方法&#xff0c;WSL 网络桥接模式无论是静态 IP 还是动态分配 IP 均支持。本篇文章则是简单讲述 WSL 安装 cuda 环境。 作者&#xff1a;炭烤毛蛋 &#xff0c;点击博主了解更多。 提示…

3种框架助你绘制完美技术路线图,导师一眼就认可

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 一份好的技术路线图&#xff0c;不仅能让导师和评委一目了然地了解你的研究计划&#xff0c;还能为你的整个研究过程提供清晰的指导。但是&#xff0c;不少学生在制作时往往摸…

MFC多媒体定时器实例(源码下载)

用MFC多媒体定时器做一个每1秒钟加一次的计时器&#xff0c;点开始计时按钮开始计时&#xff0c;点关闭计时按钮关闭计时。 1、在库文件Med_timeDlg.h文件中添加代码 class CMed_timeDlg : public CDialog { // Construction public:CMed_timeDlg(CWnd* pParent NULL); // st…

展锐平台WIFI国家码信道总结

展锐平台WIFI国家码信道总结 1.下载wireless-regdb wireless-regdb是一个开源的工程,编译它会生成regulatory.bin文件,这实际上是一个加密后的数据库,它记录各个国家可用的无线频段。 可从下面的网站上下载最新的regdb库: https://git.kernel.org/pub/scm/linux/kernel…

在3damax重创建了一个材质,然后在场景中也没有应用这个材质,将材质编辑器窗口重置,如何找回创建的材质(如何找回创建但是没有应用的材质(大概率找不回啦))

在3damax重创建了一个材质&#xff0c;然后在场景中也没有应用这个材质&#xff0c;将材质编辑器窗口重置&#xff0c;如何找回创建的材质&#xff08;如何找回创建但是没有应用的材质&#xff09; 检查场景文件&#xff1a; 如果你在保存场景文件的时候&#xff0c;那个材质也…

计算机的错误计算(一百一十四)

摘要 回复读者提问&#xff0c;就计算机的错误计算&#xff08;六&#xff09;中案例&#xff0c;讨论其另外一种形式&#xff1a; 的错误计算问题。 一读者来信说&#xff0c;在计算机的错误计算&#xff08;六&#xff09;中&#xff0c;使用了两种计算方法。实际上&#xf…

unity 2d 近战攻击判定的三种方式

1. 给攻击帧添加碰撞盒 优点&#xff1a;配置直观&#xff0c;无需事件触发 缺点&#xff1a;无法定制&#xff0c;效率低 检测放在子物体&#xff0c;可以控制旋转 添加触发器事件 注意OnTriggerEnter2D只会在挂载了collider的组件上触发 protected virtual void OnTrigge…

介绍一款开源的 Modern GUI PySide6 / PyQt6的使用

首先附上大神的开源地址&#xff08;自行克隆吧&#xff09;&#xff1a; https://github.com/Wanderson-Magalhaes/Modern_GUI_PyDracula_PySide6_or_PyQt6 步骤一&#xff1a;安装PySide6库 pip install PySide6 步骤二&#xff1a;运行main文件 python main.py 就得…

vite学习教程04、vue集成axios封装request工具类及应用

文章目录 前言1、安装axios2、封装request工具类3、封装api请求工具4、实战&#xff1a;vue中使用api请求工具类资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技…

Java | Leetcode Java题解之第459题重复的子字符串

题目&#xff1a; 题解&#xff1a; class Solution {public boolean repeatedSubstringPattern(String s) {return kmp(s s, s);}public boolean kmp(String query, String pattern) {int n query.length();int m pattern.length();int[] fail new int[m];Arrays.fill(fa…

不小心误删了虚拟环境.venv的目录文件夹,导致无法运行指定目录下的 Python 解释器怎么办?

创建虚拟环境步骤&#xff08;Windows 系统&#xff09;&#xff1a; 1、打开cmd命令 2、进入项目目录&#xff0c;在命令行中输入&#xff1a;cd 项目所在的路径 3、创建新的虚拟环境&#xff08;python3.3以上的版本&#xff09;,在当前目录下创建一个名为 .myvenv 的新虚…