SpringCloud+Eureka+Nacos使用和扩展

这篇具有很好参考价值的文章主要介绍了SpringCloud+Eureka+Nacos使用和扩展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringCloud

服务远程调用

消费者和生产者

服务生产者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)

服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

  • 服务调用关系

    • 服务提供者:暴露接口给其它微服务调用

    • 服务消费者:调用其它微服务提供的接口

    • 提供者与消费者角色其实是相对的

一个服务既可以是提供者也可以是消费者

Eureka注册中心

作用

  • 消费者如何获取服务提供者具体信息
    • 服务提供者启动时向eureka注册自己的信息eureka保存这些信息
    • 消费者根据服务名称向eureka拉取提供者信息
  • 如何有多个服务提供者,消费者该如何选择
    • 服务消费者利用负载均衡算法,从服务器从挑一个
  • 消费者如何感知提供者健康状态
    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

服务注册

第一步

pom.xml文件夹中引入依赖

服务端依赖

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

客户端依赖

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

配置eureka

appliation.yml文件中配置,因为eureka本身也是一个服务所以会将自己注册。

打开下面所配置的网址:http://localhost:1086/

server:
  port: 1086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:1086/eureka

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后将每个服务都按上面方法都配置一遍,如果是客户端,需要引入的依赖不同,在上面也发过了。

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

测试注册多个服务

之后将本地的服务重新加载一遍,如果需要注册多个,可以将服务复制;如果服务这个服务,但是这个服务已经启动会报错:提示端口已经被使用,所以启动时需要修改端口号。

方法如下。

右击服务

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

在这里需要配置VMoption但是在新版的界面中没有,需要手动添加。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后在页面中会看到这样的。在输入框中输入

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

取一个不冲突的端口号。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

在未启动项目中运行。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

运行完成后是这样的。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

服务发现

需要在启动类上加上@LoadBalanced

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后在地址栏上加上配置文件中的名字user-service

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

负载均衡

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

配置负载均衡规则

通过定义IRule实现负载均衡规则,有两种实现方式。

1、代码方式:在order-service中的OrderApplication类中,定义新的Rule:

@Bean
public IRule randomRule() {
    return new RandomRule();// 配置随机规则
}

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

2、在oder-serviceapplication.yml文件中,添加新的配置也可以修改规则:

需要将原有的注释掉

user-service: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

饥饿加载

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

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients:
      - user-service # 服务名称
      - xx-service # 如果有其它这样写即可
  1. Ribbon负载均衡规则
    1. 规则接口是IRule
    2. 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
  2. 负载均衡自定义方式
    1. 负载均衡自定义方式
    2. 配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
  3. 饥饿加载
    1. 开启饥饿加载
    2. 指定饥饿加载的微服务名称

Nacos

安装Nacos

使用docker安装

拉取镜像

docker pull nacos/nacos-server

创建容器

docker run --name nacos -e MODE=standalone -p 8848:8848 -p 9848:9848 -d nacos/nacos-server

打开地址http://192.168.2.82:8848/nacos,后面一定要加nacos否则会出现403

Nacos的依赖

父工程

现在父工程中引入这个依赖

<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>

客户端

将eureka依赖注释掉,将eureka配置注释

<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在需要的服务中引入配置

server-addr: IP地址:8848

spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 192.168.2.82:8848

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

服务分级存储模型

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

本地集群不可访问时,再去访问其它集群

一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型。

微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。

配置集群
spring:
  application:
    name: user-service
  cloud:
    nacos:
      server-addr: 192.168.2.82:8848
      discovery:
        cluster-name: HZ

当启动这两个服务的时候;此时配置文件中集群名字为HZ所以启动后,集群分组为HZ

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后将配置文件修改为SH此时启动后集群分组为SH

千万别将另外两个服务停了,如果停了另外两个就会重新读取配置文件,集群分组就变成SH了。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

点击详情

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

可以看到集群分组

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

负载均衡

修改负载均衡规则,将原有的规则替换

user-service: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则  # 负载均衡规则

当访问接口时会优先选择名字相同的集群,如这里的配置中的HZ,也就是本地集群,如果服务挂了才会访问其它的服务。

假设我们将本地的HZ集群停机。会看警告信息。这是才会访问远程的集群。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

权重设置

nacos中也可以做权重管理,当权重为1时是全部都可以访问的。

如果调到0则不会向这个服务发起请求。所以一般在升级服务器时会会用到这点。

当调到0时这时可以对服务进行升级,或者这台机器性能较差让它受到少量的请求,又或者当升级完成将权重设为0.1放进来少量的用户进行访问。

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

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

环境隔离

配置命名空间

设置命名空间

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

三个选项只需要填写 两个即可。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后就会在服务列表中看到

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

将服务移到命名空间下

要想把服务移动到命名空间下,需要在代码中修改。

移动到命名空间下,需要把命名空间的ID配置过去。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

只需要在配置文件中加上这样。

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后就可以在dev中看到

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

  • Nacos与eureka的共同点

  • 都支持服务注册和服务拉取

  • 都支持服务提供者心跳方式做健康检测

  • Nacos与Eureka的区别

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除

  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

微服务拉取

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

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

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

如果无法读取需要加上namespace

namespace: 5d7b6c65-7ab8-440e-b580-6f060613913a # 你的命名空间

完善代码

spring:
  application:
    name:  userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev
  cloud:
    nacos:
      server-addr: 192.168.2.82:8848
      config:
        file-extension: yaml
        namespace: 5d7b6c65-7ab8-440e-b580-6f060613913a # 你的命名空间

Data id格式为

服务名称-开发环境.file-extension
name-active.file-extension

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

3、读取nacos配置

在浏览器中

验证读取到配置文件

@Value("${pattern.dateformat}")
private String dateformat;

@GetMapping("now")
public String now() {
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}

完善代码

import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    @Value("${pattern.dateformat}")
    private String dateformat;

    @GetMapping("now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }

    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }
}

配置热更新

方式一

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

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后在配置文件中修改

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

验证热更新

第一次请求时

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

第二次请求时

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

方式二

使用另一种依赖注入方式,单独创建一个配置文件

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

将之前的代码注释掉,并引入新的依赖(配置文件中的),重启服务器即可看到效果。

这样的操作也可以实现热更新

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

配置共享

在浏览器中新建服务,这个服务要不带后缀的,比如devtest

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

创建后在这个公共配置中写上配置内容

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后在配置文件中加上,以方便读取配置文件的内容

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

之后使用控制器返回,读取到的内容

SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生

调试接口
SpringCloud+Eureka+Nacos使用和扩展,后端,spring cloud,eureka,spring,后端,docker,容器,云原生文章来源地址https://www.toymoban.com/news/detail-772772.html

到了这里,关于SpringCloud+Eureka+Nacos使用和扩展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Cloud系列】- Eureka使用详解

    Eureka2.0版本已经停止维护,为什么要写这篇博客重复已停止更新的中间件,其目的主要是: 认识微服务注册中心:虽然Eureka已经停止维护,但微服务架构在当今非常流程,学习Eureka可以更好的理解微服务。 便于老旧系统维护:如果使用微服务,公司一定会存在使用Eureka服务

    2024年02月09日
    浏览(51)
  • springcloud微服务架构(eureka、nacos、ribbon、feign、gateway等组件的详细介绍和使用)

    目录 一、微服务演变 1、单体架构(Monolithic Architecture) 2、分布式架构  3、微服务 4、 总结 5、微服务架构 5.1、 微服务技术对比 5.2、企业需求 二、spring cloud  springCloud与SpringBoot的版本兼容关系 1、服务拆分及远程调用 1.1、服务拆分 1.1.1、服务拆分注意事项 1.1.2、项目实战

    2024年02月08日
    浏览(43)
  • SpringCloud(2) 注册中心Eureka、Nacos

    注册中心是微服务中必须要使用的组件,考察我们使用微服务的程度。 注册中心的核心作用是:服务注册和发现。 常见的注册中心: Eureka、Nacos 、Zookeeper 下面我们以 Eureka 注册中心为例,说一下注册中心的作用: 假如我们有一个订单服务 order-service ,需要消费用户服务 u

    2024年02月11日
    浏览(43)
  • SpringCloud(H版&alibaba)框架开发教程,使用eureka,zookeeper,consul,nacos做注册中心——附源码(1)

    源码地址:https://gitee.com/jackXUYY/springboot-example 创建订单服务,支付服务,公共api服务(共用的实体),eureka服务 1.cloud-consumer-order80 2.cloud-provider-payment8001 3.cloud-api-commons 4.cloud-eureka-server7001 5.cloud-eureka-server7002 如图所示 修改本地host映射 修改数据库地址为自己的地址,并初始

    2024年02月03日
    浏览(50)
  • SpringCloud(一)Eureka、Nacos、Feign、Gateway

    微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。 在微服务架构中,每个服务都是自我包含的,并且实现了单一的业务功能。简单来说,就是将一个系统按业务划分成多个子系统,每个子系统都是完整的,可独立

    2024年02月08日
    浏览(41)
  • 分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>

    分布式架构的一种 把服务进行 拆分 springcloud 解决了 服务拆分过程中的 治理问题 与单体应用 进行区分 (单体架构 把业务所有功能集中开发,打成一个包部署) 每个模块独立开发和部署(服务集群) 服务之间互相调用 出现分布式技术 Webservice ESB Hession Dubbo 异步通信 消息队

    2024年02月07日
    浏览(54)
  • 38.SpringCloud—注册中心(eureka/nacos)、负载均衡Ribbon

    目录 一、SpringCloud。 (1)认识微服务。 (1.1)单体架构与分布式架构(微服务)。 (1.2)微服务技术对比。 (1.3)SpringCloud。 (2)服务拆分及远程调用。 (2.1)服务拆分。 (2.2)远程调用。 (3)提供者与消费者。 (4)Eureka注册中心。 (4.1)Eureka的作用。  (4.2)搭建

    2024年02月09日
    浏览(57)
  • 在Spring Cloud中使用组件Zuul网关,并注册到Eureka中去

    在上一篇中,我们搭建了Spring Cloud的父子模块,并实现了一个Eureka子模块的启动,可以通过浏览器地址去访问Eureka主页了,相信了解过的童鞋应该看到,主页上并未有任何服务去注册,那么我们就在这篇,使用zuul网关作为第一个注册到Eureka注册中心的服务吧。 上一篇博文地

    2024年02月05日
    浏览(59)
  • Spring Cloud学习笔记:Eureka简介,Eureka简单样例

    这是本人学习的总结,主要学习资料如下 - 马士兵教育 Eureka 是 SpringCloud Nexflix 的核心子模块,其中包含 Server 和 Client 。 Server 提供服务注册,存储所有可用服务节点。 Client 用于简化和 Server 的通讯复杂度。 下面是 Eureka 的简单架构图 每一个服务节点需要在 Eureka Server 中注册

    2024年04月16日
    浏览(55)
  • SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

    单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点:架构简单;部署成本低(打jar包、部署、负载均衡就完成了) 缺点:耦合度高(维护困难、升级困难,不利于大项目开发) 分布式架构 根据业务功能对系统做拆分,每个业务功能模块作为独立

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包