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日

相关文章

  • 迅雷9.1.21正式版发布 增加会员专属浮窗(附官方下载地址)

    迅雷9.1.21正式版发布 增加会员专属浮窗(附官方下载地址)攻略 介绍 迅雷是一款常用的下载工具,最新发布的9.1.21正式版增加了会员专属浮窗功能。本攻略将详细介绍如何下载、安装和使用迅雷9.1.21正式版,并演示会员专属浮窗的使用方法。 步骤 1. 下载迅雷9.1.21正式版 首先,你需要下载迅雷9.1.21正式版的安装程序。你可以通过以下官方下载地址…

    other 2023年8月4日
    00
  • 怎么将文件夹文件名都导入到excel表格中?

    将文件夹文件名导入到Excel表格中可以利用Windows PowerShell和Excel VBA两种方法。下面分别介绍这两种方法的具体步骤。 利用Windows PowerShell 打开“开始菜单”,输入“Windows PowerShell”并运行。 切换到要导入文件名的文件夹所在的目录,例如: cd C:\Users\UserName\Docume…

    other 2023年6月26日
    00
  • 6个优秀的微信小程序ui组件库

    6个优秀的微信小程序UI组件库 微信小程序已经成为了移动互联网应用领域的一个重要发展方向,越来越多的开发者将业务迁移到微信小程序平台上。在微信小程序的开发中,UI组件库在开发效率和用户体验上起到非常重要的作用。接下来,我们就来介绍6个优秀的微信小程序UI组件库。 1. Vant Weapp Vant Weapp 是有赞前端团队推出的一套基于微信小程序开发的组…

    其他 2023年3月29日
    00
  • c++ 数字类型和字符串类型互转详解

    C++ 数字类型和字符串类型互转详解 本文将详细介绍C++语言中数字类型和字符串类型之间的互转方法,涉及以下内容: 数据类型概述 数字类型转字符串类型 字符串类型转数字类型 代码示例 1. 数据类型概述 在C++中,数字类型分为整型、浮点型等多种。 常用的有: 整型:int、long、short、char 浮点型:float、double 字符串类型即为字符…

    other 2023年6月26日
    00
  • l#脚本语言 直接把dll当脚本执行(图解说明)

    l#脚本语言 直接把dll当脚本执行(图解说明) 起因 很多开发者都熟悉 C# 语言,但是在开发过程中,可能会需要用到一些其他语言的库,比如 C++ 的 DLL 库,而 C++ 和 C# 语言不同,直接调用 DLL 库需要使用一些繁琐的过程。因此我们开始对 C# 语言进行扩展,用一种简单易懂的方式,直接把 DLL 当作脚本来使用,从而提高开发效率。 实现过程…

    其他 2023年3月29日
    00
  • vue3封装简易的vue-echarts问题

    下面是关于封装简易的vue-echarts的攻略。 什么是 Vue-Echarts Vue-Echarts是一款基于 Vue.js 的 Echarts 封装组件库,它提供了一个简洁明了的 API,便于我们在 Vue.js 项目中使用 Echarts 图表库。它能够帮助我们快速实现各种图表,提高了我们的开发效率。 Vue3封装简易的Vue-Echarts 安装…

    other 2023年6月25日
    00
  • navicat创建oracle数据库

    Navicat创建Oracle数据库攻略 Navicat是一款功能强大的数据库管理工具,支持多种数据库,包括Oracle数据库。本攻略将介绍如何使用Navicat创建Oracle数据库,并提供两个示例说明。 步骤一:连接Oracle数据库 在Navicat中连接Oracle数据库,需要提供以下信息: 主机名或IP地址 端口号 服务名或SID 用户名和密码 以…

    other 2023年5月9日
    00
  • 等待资源时检测到死锁

    以下是“等待资源时检测到死锁的完整攻略”的详细讲解,过程中包含两个示例说明的标准Markdown格式文: 等待资源时检测到死锁的完整攻略 在数据库操作中,当多个事务同时请求同一资源时,可能会出现死锁的情况。当等待资源时检测到死锁时,我们需要采取相应的措施来解决问题。本文将介绍如何处理等待资源时检测到死锁的问题,并提供两个常见的示例。 1. 原因分析 等待资源…

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