Eureka详解

简介: Eureka详解

 Eureka概述和架构

 

Eureka

Spring Cloud Eureka 是Netflix 开发的注册发现组件,本身是一个基于 REST 的服务。提供注册与发现,同时还提供了负载均衡、故障转移等能力

Eureka3个角色

服务中心,服务提供者,服务消费者

Eureka Server:服务器端。它提供服务的注册和发现功能,即实现服务的治理。

Service Provider:服务提供者。它将自身服务注册到Eureka Server中,以便“服务消费者”能够通过服务器端提供的服务清单(注册服务列表)来调用它。

Service Consumer:服务消费者。它从 Eureka 获取“已注册的服务列表”,从而消费服务

springcloud架构

image.gif编辑

Eureka微服务信息完善

默认

SpringCloud体系里服务实体向eureka注册时注册名默认是

IP名:应用名:应用端口名

Actuator依赖

<!-- actuator -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

image.gif

修改application.yml

eureka:            
  instance:
  #根据需要自己起名字,SpringCloud体系里服务实体向eureka注册时注册名
   instance-id: springcloud-dept-8001

image.gif

Eureka服务自保与剔除

服务剔除服务自保的选择

服务剔除/服务自保,注册中心在同一时刻,只能用一种

在实际应用里,并不是所有无心跳的服务都不可用,也许因为短暂的网络抖动等原因,导致服务节点与注册中心之间续约不上,但服务节点之间的调用还是属于可用状态,这时如果强行剔除服务节点,可能会造成大范围的业务停滞

服务剔除

服务剔除把服务节点果断剔除,即使你的续约请求晚了一步也毫不留情

服务自保默认开启

服务自保把当前所有节点保留

服务自保模式往往是为了应对短暂的网络环境问题,在理想情况下服务节点的续约成功率应该接近100%,如果突然发生网络问题,比如一部分机房无法连接到注册中心,这时候续约成功率有可能大幅降低。但考虑到Eureka采用客户端的服务发现模式,客户端手里有所有节点的地址,如果服务节点只是因为网络原因无法续约但其自身服务是可用的,那么客户端仍然可以成功发起调用请求。这样避免了被服务剔除给错杀

服务自保修改application.yml

这是服务自保的总闸,以下配置将强制关闭服务自保,即便上面的自动开关被触发,也不能开启自保功能

# 参数来关闭保护机制,以确保注册中心可以将不可用的实例正确剔除,默认为true。

eureka.server.enable-self-preservation=false;

image.gif

Eureka服务发现

服务发现接口

@Autowired
private DiscoveryClient discoveryClient;

image.gif

获取所有服务

@GetMapping("/discovery")
public Object testDiscoveryClient(){
    //获取所有服务列表清单
    List<String> services = discoveryClient.getServices();
    for (String service : services) {
        System.out.println(service);
    }
    return this.discoveryClient;
}

image.gif

获取服务生产者实例及信息

//服务生产者名字
String hostName="CLOUD-PAYMENT-PROVIDER";
//1.服务发信中获取所有服务生产者的实例
List<ServiceInstance> instances = discoveryClient.getInstances(hostName);
//2.获取具体实例  服务生产者的实例
ServiceInstance serviceInstance = instances.get(0);
System.out.println(serviceInstance.getUri());
System.out.println(serviceInstance.getPort());
System.out.println(serviceInstance.getHost());
System.out.println(serviceInstance.getServiceId());
System.out.println("=========================");

image.gif

Eureka服务发现

RestTemplate

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版:例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute

配置类

我们会将RestTemplate注入到容器当中,是为了让他保持单例,当我们哪个类要使用的时候直接从容器里面获取即可。这样可以避免每调用一次创建一个RestTemplate对象

/**
 * RestTemplate放入容器中
 */
@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

image.gif

@LoadBalanced暂时不要用

在配置类中的restTemplate添加@LoadBalanced注解

这个注解会 给这个组件 有负载均衡的功能

使用

@GetMapping("/index")
public String index() {
    //服务生产者名字
    String hostName ="CLOUD-PAYMENT-PROVIDER";//Application底下
    //远程调用方法具体URL(接口路径)
    String url = "/payment/index";
    //1.服务发信中获取所有服务生产者的实例
    List<ServiceInstance> instances = discoveryClient.getInstances(hostName);
    //2.获取具体实例  服务生产者的实例
    ServiceInstance serviceInstance = instances.get(0);
    //3.发起远程调用(url/接口方法返回类型)
    String rest = restTemplate.getForObject(serviceInstance.getUri()+url, String.class);
    return rest;
}

image.gif


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
Cloud Native Devops 持续交付
【云原生|云原生基础】什么是云原生?一文给你讲清楚!
【云原生|云原生基础】什么是云原生?一文给你讲清楚!
7636 1
一看就会R语言绘制限制性立方样条(Restricted cubic spline,RCS)
最近在研究怎么处理论文数据,各种分析软件都有使用,比如:SPSS、Origin、stata16、medcalc和R语言都有些研究,其中除R语言外都是收费的。不过经过一番功夫,我这边有SPSS、stata16、Origin和medcalc的破解版,有需要的可以关注我的公众号,私聊我来获取,我将给你一个百度网盘下载地址。
1727 0
|
SQL 存储 数据库
sql数据库中的 delete 与drop的区别
sql数据库中的 delete 与drop的区别
918 1
|
2月前
|
负载均衡 Java Nacos
Gateway服务网关
网关是微服务架构的统一入口,实现请求路由、权限控制、限流及负载均衡。SpringCloud Gateway基于WebFlux,性能优于Zuul。支持断言与过滤器工厂,可自定义全局过滤器,解决跨域等问题,是微服务流量管控的核心组件。
231 0
|
安全 Go 数据库
Navicat-Cracker NavicatCrackerDlg.cpp:332 -3All patch solutions are 解决Navicat 162版本注册问题的方法与分析【详细步骤】
Navicat-Cracker NavicatCrackerDlg.cpp:332 -3All patch solutions are 解决Navicat 162版本注册问题的方法与分析【详细步骤】
1370 0
|
7月前
|
SQL 人工智能 安全
深度复盘MCP安全风暴:一个工单如何演变成数据库“特洛伊木马”危机?
近期,安全公司 General Analysis 披露的MCP安全漏洞在技术圈引发了巨大震动。这个"特洛伊木马"式的安全漏洞暴露了一个现实:AI时代,传统的数据库访问方式已经无法满足安全需求。阿里云数据管理DMS新推出的DMS MCP Server,正是为AI时代的数据库安全访问而生,它不仅完美解决了传统MCP的安全隐患,更为企业提供了一个安全、智能、高效的数据访问新范式。
583 5
|
7月前
什么是AOP
AOP(面向切面编程)是一种编程范式,旨在将横切关注点(如日志、事务管理)从业务逻辑中分离,提升代码模块化与可维护性。核心概念包括:切面(封装横切逻辑)、通知(定义执行时机)、切入点(指定应用位置)、织入(整合切面与业务逻辑)。常见通知类型有前置、后置、返回、异常和环绕通知。
478 1
|
计算机视觉 Python
OpenCV多目标匹配绘制红框及统计铁路站台总数、最短距离地铁站实战(附Python源码)
OpenCV多目标匹配绘制红框及统计铁路站台总数、最短距离地铁站实战(附Python源码)
239 0
OpenCV多目标匹配绘制红框及统计铁路站台总数、最短距离地铁站实战(附Python源码)
什么是依赖倒置原则
依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计中的SOLID原则之一,强调高层模块不应依赖低层模块,双方应依赖于抽象。该原则包含两方面:抽象不依赖细节,细节依赖抽象。这有助于降低耦合度、提高模块化和灵活性。实践中可通过接口定义契约、依赖注入等方式实现。例如,在Java中定义`MessageService`接口及其实现`EmailService`,高层`NotificationService`依赖于`MessageService`接口而非具体实现,从而实现了对扩展开放、对修改关闭的设计目标。
784 1
channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
【5月更文挑战第15天】channelSftp.put(InputStream src, String dst, int mode);里的mode都是什么类型的
692 2