SpringCloud Eureka服务发现实现过程

下面是 Spring Cloud Eureka 服务发现实现过程的详细攻略。

1. 什么是 Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud 项目中比较重要的组件之一,它是一个服务注册和发现的组件。简单来说,就是服务提供者将自己的信息(比如服务地址、端口号等)注册到 Eureka 中心服务器上去,服务消费者从 Eureka 中心服务器上查询可用的服务提供者信息,以完成调用。

2. Spring Cloud Eureka的核心特性:

  • 服务注册和发现:Spring Cloud Eureka 作为服务的注册中心和发现中心,可以管理各个微服务实例的注册和注销。
  • 负载均衡:Spring Cloud Eureka 在服务发现的基础上,对服务的负载均衡提供了支持。
  • 自动失效剔除:Spring Cloud Eureka 提供了自动失效剔除的能力,即当某个微服务实例在一定时间内没有向 Eureka 续约,就会自动从 Eureka 服务端的服务列表中剔除。

3. Spring Cloud Eureka 服务发现实现过程

3.1 pom.xml 加依赖

在使用 Eureka 前,需要先在 pom.xml 中引入以下依赖:

<!-- Eureka 服务发现组件 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

3.2 application.yml 配置

在配置文件中配置 Eureka 的客户端和服务端:

  • Eureka服务端
server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
  • Eureka客户端
server:
  port: 8001

spring:
  application:
    name: eureka-client

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

3.3 主启动类配置

在主启动类上添加@EnableEurekaServer注解开启 Eureka服务端的功能。如下:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

3.4 Eureka REST服务接口

# 查看所有服务信息列表
GET http://localhost:8761/eureka/apps 

# 查看某个服务的信息
GET http://localhost:8761/eureka/apps/{serviceName} 

3.5 搭建 Eureka客户端

  • 引入 Eureka 客户端依赖

在 pom.xml 中加入以下依赖:

<!-- 引入 Eureka 客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 配置文件中配置 Eureka 客户端信息
server:
  port: 8001

spring:
  application:
    name: eureka-client

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  • 在主启动类上添加@EnableDiscoveryClient开启客户端服务发现功能。如下:
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}
  • 在客户端 Controller 中加入获取服务信息接口
@RestController
@RequestMapping("/client")
public class EurekaClientController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/info")
    public Object getInfo() {
        List<ServiceInstance> list = discoveryClient.getInstances("eureka-client");
        if (list != null && !list.isEmpty()) {
            return list.get(0);
        }
        return null;
    }
}

3.6 Eureka 客户端如何调用服务

在客户端中可以通过 RestTemplate 实现服务调用。具体代码如下:

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getProduct")
    public String getProduct() {
        String url = "http://eureka-client/product/get";
        String result = restTemplate.getForObject(url, String.class);
        return result;
    }

}

在上述代码中,我们使用 RestTemplate 以 HTTP 方式进行调用,调用的 URL 是另一台服务(eureka-client)的 /product/get 接口。

4. 示例说明

在这里,我们以一个简单的服务提供者和服务消费者为例,来展示 Spring Cloud Eureka 的服务注册、发现、调用流程。

4.1 客户端服务提供者

假设我们有一个名为 Product 的服务提供者,监听端口为 8080,提供一个 /get 接口:

@RestController
@RequestMapping("/product")
public class ProductController {

    @GetMapping("/get")
    public String getProduct() {
        return "Product Info";
    }

}

4.2 服务器端

我们编写一个名为 EurekaServer 的服务端,监听端口为 8761。在这个 EurekaServer 中,Eureka 注册中心默认的 /eureka/** URL 支持程序的注册和发现。从 EurekaServer 的 log 可以看到,这个注册中心已经在启动并成功接收了 Product 的服务注册请求。

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

4.3 客户端服务消费者

接下来,我们编写一个名为 Order 的服务消费者,监听端口为 8081,并向 Eureka 注册中心注册自己:

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {

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

}

在 OrderController 中通过 RestTemplate 实现服务调用:

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getProduct")
    public String getProduct() {
        String url = "http://product-service/product/get";
        String result = restTemplate.getForObject(url, String.class);
        return result;
    }

}

在上述的调用代码中,我们使用 RestTemplate 以 HTTP 方式进行调用,调用的 URL 是另一台服务(product-service)的 /product/get 接口。

5. 总结

通过以上实例,我们展示了 Spring Cloud Eureka 的服务注册、发现、调用流程。需要注意的是,每个服务在注册到 Eureka Server 时,都要给自己注册进 Eureka Server 独立的 applicationName,并且每一个 applicationName 会被视为一个微服务。

希望本文能够帮助你更好地了解 Spring Cloud Eureka 的使用方法,以及它在微服务架构中的重要作用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringCloud Eureka服务发现实现过程 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • C++的类型转换(强转)你了解吗

    当我们需要将一种类型的数据转换为另一种类型时,可以使用C++的类型转换。其中,强制类型转换是一种向编译器发出的指令,强制将一个数据类型转换为另一种数据类型。在C++中,强制类型转换有三种方式,分别是static_cast、reinterpret_cast和const_cast。 static_cast static_cast用于通常的转换操作,例如将整数转为…

    other 2023年6月26日
    00
  • 使用jquery实现局部刷新div

    以下是“使用jQuery实现局部刷新div”的完整攻略: 使用jQuery实现局部刷新div 在Web开发中,您可能需要在刷新整个页面的情况更新页面的一部分。这可以通过使用jQuery来实现。本攻略将介绍如何使用jQuery实现局部刷新div。 步骤1:引入jQuery库 在使用jQuery之前,您需要在页面中引入jQuery库。您可以使用以下代码在页面中引…

    other 2023年5月7日
    00
  • 怎样清除显卡右键菜单

    清除显卡右键菜单的过程可以分两步完成:首先是通过修改注册表来移除菜单项,然后是重启资源管理器。 第一步:移除菜单项 在 Windows 中,显卡驱动安装后,会在右键菜单中添加一些功能项,例如 NVIDIA 控制面板、AMD Radeon Setting 等。如果你不需要这些功能,可以通过修改注册表来移除对应的菜单项。 打开注册表编辑器:在 Windows 搜…

    other 2023年6月27日
    00
  • 7款易上手c语言编程软件推荐

    7款易上手C语言编程软件推荐 C语言是一门广泛应用于系统编程、嵌入式系统和游戏开发的编程语言。想要学好C语言,选用适合自己的编程软件是非常重要的。本文将为大家推荐7款易上手的C语言编程软件。 1. Dev-C++ Dev-C++是一个免费的、开源的IDE集成开发环境,它支持C语言和C++,可以在Windows操作系统上运行。Dev-C++提供了基本的编辑器和…

    其他 2023年3月29日
    00
  • window.onload 加载完毕的问题及解决方案(上)

    针对“window.onload 加载完毕的问题及解决方案(上)”这个话题,我们需要分别从以下几个方面进行讲解: 什么是 window.onload? window.onload 是 JavaScript 中一个非常重要的事件,用于在页面中所有的资源(如文件、图片等)都加载完成后触发,也就是在文档的所有内容(包括 DOM、CSS、JS、图片)都已经加载完成后…

    other 2023年6月25日
    00
  • 微信小程序开发实战快速入门教程

    微信小程序开发实战快速入门教程 本文将详细讲解如何使用微信小程序进行开发,并快速入门。 第一步:开发环境搭建 在开始小程序开发之前,需要先创建开发者账号并下载微信开发者工具。开发者账号和微信开发者工具都可以在微信公众平台官网上申请。 安装微信开发者工具后,打开并登录开发者账号。在首页选择“新建小程序”,填写小程序信息,生成代码模板并开始开发。 第二步:小程序…

    other 2023年6月26日
    00
  • Spring 静态变量/构造函数注入失败的解决方案

    Spring静态变量/构造函数注入失败的解决方案 在使用 Spring 进行开发的过程中,有时会遇到注入静态变量或者依赖注入到构造函数中的依赖注入失败的问题。本文将介绍这些问题的原因,以及如何解决。 1.为什么静态变量/构造函数注入失败 在使用 Spring 进行依赖注入时,常见的方式是在类的属性编辑和 setter 方法中使用注解进行注入。对于静态变量和构…

    other 2023年6月26日
    00
  • javascript类型系统 Array对象学习笔记

    JavaScript类型系统 Array对象学习笔记 1. 创建数组 可以使用以下方法来创建一个数组: 使用数组字面量表示法:let arr = [1, 2, 3]; 使用Array构造函数:let arr = new Array(1, 2, 3); 使用Array.from方法:let arr = Array.from([1, 2, 3]); 示例代码: …

    other 2023年10月15日
    00
合作推广
合作推广
分享本页
返回顶部