我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringCloud Eureka应用全面介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringCloud Eureka应用全面介绍

Eureka

什么是服务治理

为什么需要服务治理?

  服务治理是主要针对分布式服务框架的微服务,处理服务调用之间的关系、服务发布和发现、故障监控与处理,服务的参数配置、服务降级和熔断、服务使用率监控等。

需要服务治理的原因:

  • 过多的服务 URL 配置困难
  • 负载均衡分配节点压力过大的情况下,需要部署集群
  • 服务依赖混乱,启动顺序不清晰
  • 过多服务,导致性能指标分析难度较大,需要监控
  • 故障定位与排查难度较大

什么是服务注册与发现

  服务注册主要针对服务提供者,服务启动后需要将本身以别名的方式注册到注册中心上;而服务发现主要是针对消费者(服务使用者),它在调用服务的时候需要通过别名去注册中心获取到相应的服务,然后再实现本地RPC调用远程RPC的功能。

Eureka的两大组件

  Eureka Server: 提供注册服务,各节点启动时,会在EurekaServer中进行注册,各服务的节点信息会储存在EurekaServer中的服务注册表中。

  Eureka Client: 其本质是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的使用负载算法的负载均衡器在启动应用后将会向Eureka Server发送心跳(默认周期30s),如果EurekaServer在多个心跳周期内没有接收到某节点的心跳,将会把该节点从服务注册表上移除(默认周期90s)

Eureka的使用

Eureka服务端server的创建

  首先是创建一个子模块作为eureka的服务器模块,主要与其他的子模块有以下三处不同:

一、导入eureka服务端的依赖

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

二、配置文件配置eureka相关

# eureka的单机版配置
eureka:
  instance:
    hostname: localhost  #eureka服务端的实例名字
  client:
    register-with-eureka: false    #表示不向注册中心注册自己
    fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
    service-url:
      #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

三、主程序类上使用注解开启服务器

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

Eureka客户端client的创建

  之前创建的支付子模块8001就可以标记为Eureka的客户端,我们需要做的和Eureka服务端的三步一样:

一、导入eureka客户端的依赖

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

二、配置文件配置eureka相关

eureka:
  client:
    register-with-eureka: true #是否向注册中心注册自己
    fetchRegistry: true #是否从注册中心抓取已有的注册信息 默认true
    service-url:
      defaultZone: http://localhost:7001/eureka #服务端的地址

三、主程序类使用注解开启客户端

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

  红框显示当前名称为CLOUD-PAYMENT-SERVICE的服务状态为UP,也就是说这个模块已经被注册进了eureka服务

  目前为止,我们的eureka服务端上就只有一个支付模块作为服务的提供者注册进eureka服务器,并没有服务的调用者,于是乎我们可以将80端口的消费者模块通过以上三步,将其作为eureka客户端注册进eureka服务器,让其实现服务的调用

集群搭建

Eureka服务端的集群搭建

  想必集群的好处这里就不需要再进行赘述了,单体的服务器一旦出现故障整个项目就搞崩了,如果是集群就不一样了,一个故障其他顶上,服务之间可以实现互相注册相互守望

  现在我们就创建一个新的服务端子模块命名7002,作为集群中的另一个模块使用。那么,如何实现互相注册相互守望呢?答案就是:分别在配置文件中配置,使集群中的服务都能互相发现,其中最重要的就是defaultZone字段的对应值

server:
  port: 7001

# eureka的单机版配置
eureka:
  instance:
    hostname: eureka7001.com  #eureka服务端的实例名字,这里以localhost代替
  client:
    register-with-eureka: false    #表示不向注册中心注册自己
    fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 单机版,指向的是自己
      # 集群版,指向集群中的其他服务
      defaultZone: http://eureka7002.com:7002/eureka/,
                   http://eureka7003.com:7003/eureka/

server:
  port: 7002

# eureka的单机版配置
eureka:
  instance:
    hostname: eureka7002.com   #eureka服务端的实例名字,这里以localhost代替
  client:
    register-with-eureka: false    #表示不向注册中心注册自己
    fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 单机版,指向的是自己
      # 集群版,指向集群中的其他服务
      defaultZone: http://eureka7001.com:7001/eureka/,
                   http://eureka7003.com:7003/eureka/

server:
  port: 7003

# eureka的单机版配置
eureka:
  instance:
    hostname: localhost  # eureka服务端的实例名字,这里以localhost代替
  client:
    register-with-eureka: false    #表示不向注册中心注册自己
    fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
    service-url:
      # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 单机版,指向的是自己
      # 集群版,指向集群中的其他服务
      defaultZone: http://eureka7001.com:7001/eureka/,
                   http://eureka7002.com:7002/eureka/

  集群搭建完毕之后,服务也要向集群中的所有模块进行注册,那么就需要使用配置文件了,这里以服务调用者80端口为例

server:
  port: 80

spring:
  application:
    name: cloud-order-service

eureka:
  client:
    register-with-eureka: true #是否向注册中心注册自己
    fetchRegistry: true #是否从注册中心抓取已有的注册信息 默认true
    service-url:
#      defaultZone: http://localhost:7001/eureka #服务端的地址

      #服务端的地址,服务端为集群版,向所有的模块都注册
      defaultZone: http://localhost:7001/eureka,
                   http://localhost:7002/eureka,
                   http://localhost:7003/eureka

Eureka客户端的集群搭建

  从8001模块copy一个为8002,作为客户端集群的另一个模块,同样使用配置文件,将其也注册进服务端集群。此时就可以使用服务调用者80进行调用了,但是80的controller是直接写死的域名和端口,于是需要将域名端口改为微服务的名称,然后在服务调用者80模块开启负载均衡让请求合理的分配到服务集群的每一个模块

将原先的指定域名+端口改为指定服务

配置中开启负载均衡

这样集群就部署好了,可以实现服务调用对8001和8002的轮询

微服务模块的相关配置

配置服务的名称

eureka:
  instance:
    instance-id: payment8001

访问路径显示IP地址

eureka:
  instance:
    prefer-ip-address: true

服务发现

  所谓的服务发现就是对于已经注册进eureka里的微服务,可以通过这个方式来获得该服务的相关信息,实现服务发现功能分三步走:

一、对象注入

@Resource
private DiscoveryClient discoveryClient;

二、调用api获取服务信息

@GetMapping(value = "/discovery")
public Object discovery() {
    List<String> services = discoveryClient.getServices();
    for (String service : services) {
        log.info("***********service: " + service);
    }
    List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    for (ServiceInstance instance : instances) {
        log.info(instance.getServiceId() + "\t"
                + instance.getHost() + "\t"
                + instance.getPort() + "\t"
                + instance.getUri());
    }
    return this.discoveryClient;
}

三、主程序入口注解开启发现功能

@EnableDiscoveryClient

这样即可打印服务的相关信息

自我保护机制

什么是自我保护机制

  EurekaServer会检查最近15分钟内所有EurekaClient正常心跳占比,如果低于85%就会触发自我保护机制,此时Eureka暂时把这些失效的服务保护起来,不会立即将其剔除。Eureka在启动完成后,每隔60秒会检查一次服务健康状态,如果这些暂时失效的服务过一段时间后(默认90秒)还是没有恢复,就会把这些服务剔除。反之这个服务就不会因为网络的延时、卡顿、拥挤等问题而被错误删除。

  总而言之,自我保护机制就是说某一时刻微服务不可用时,Eureka不会立即将其剔除,而是在一段时间内等待其正常发送心跳。这属于CAP原则的AP分支,主要保证了可用性和分区容错性

如何禁用自我保护机制

  服务端使用配置文件关闭eureka的自我保护机制

eureka:
  server:
    # 关闭自我保护机制,保证不可用服务被及时踢除
    enable-self-preservation: false
    # 
    eviction-interval-timer-in-ms: 2000

  客户端使用配置文件设置心跳相关配置

eureka:
  instance:
    # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1
    # Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 2

到此这篇关于SpringCloud Eureka应用全面介绍的文章就介绍到这了,更多相关SpringCloud Eureka内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringCloud Eureka应用全面介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringCloud hystrix断路器与全局解耦全面介绍

什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作
2022-11-13

SpringCloud hystrix断路器与局部降级全面介绍

什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作
2022-11-13

JavaWeb Hibernate使用全面介绍

在正式进入Hibernate的高级应用之前,需要了解声明是数据模型与领域模型,这两个概念将会帮助我们更好的理解实体对象的关联关系映射
2022-11-13

SpringCloud Gateway DispatcherHandler调用方法详细介绍

我们第一个关注的类就是DispatcherHandler,这个类提供的handle()方法,封装了我们之后所有的handlerMappings,这个DispatcherHandler有点想SpringMVC的DispatchServlet,里面也是封装了请求和对应的处理方法的关系
2022-11-13

SpringCloud Eureka服务注册中心应用入门实例分析

这篇文章主要介绍“SpringCloud Eureka服务注册中心应用入门实例分析”,在日常操作中,相信很多人在SpringCloud Eureka服务注册中心应用入门实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-07-02

Win10系统桌面转制UWP应用介绍

在Build2016大会期间微软宣布了将传统桌面应用转制为Win10Uwp应用的转换工具,转化后的应用还可以为其添加UWP平台特色功能的支持,php和小编一起到下文了解一下吧。 UWP应用是Win10“大统一”的关键
2023-05-20

Django框架:一个全面的介绍

Django框架:一个全面的介绍Django是Python中最受欢迎和使用广泛的Web开发框架之一。它是一个强大的、高效的、自由的开源造架构,可以帮助Web开发人员快速构建高质量的Web应用程序。通过Django,开发人员可以轻松地管理W
Django框架:一个全面的介绍
2024-01-19

全面介绍Apriori算法(Python实现)

Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。而且算法已经被广泛的应用到商业、网络安全等各个领域。今天编程学习网就和大家全面的介绍一下Apriori算法。编程学习网教育
全面介绍Apriori算法(Python实现)
2024-04-23

为你介绍在交换机应用里面的几种安全设置

  交换机(switch)是一种在通信系统中完成信息交换功能的设备。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。今天小编要给大家分享一篇教程,那就是:为你介绍在交换机应用里面的几种安全设置。  第一种:802.1X基于端口的访问控制  为了能够阻止一下非法用户对于局域网的接入,从而保障网络
为你介绍在交换机应用里面的几种安全设置
2024-04-18

SpringBoot日志配置操作全面介绍

日志,通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节。但是,这丝毫不影响它在任何一个系统中的重要的地位,这篇文章主要介绍了SpringBoot日志配置
2022-11-13

怎样全面介绍Linux终端命令

这期内容当中小编将会给大家带来有关怎样全面介绍Linux终端命令,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。这里介绍一些Linux终端命令,大家一定要熟记这些终端命令,会省去很多的查找这些命令用法的时间
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录