SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程

Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。

一. Eureka基础知识

(1)服务治理

服务治理是微服务架构中最为核心和基础的模块,主要负责实现各个微服务实例的自动化注册与发现。服务治理能够管理服务之间的依赖关系,实现服务调用、负载均衡、容错等功能。Eureka作为Spring Cloud的一部分,基于Netflix Eureka进行了二次封装,用于完成微服务架构中的服务治理功能。

(2)服务注册

服务注册是服务治理的一个重要环节。在服务治理框架中,通常会构建一个注册中心(如Eureka Server),每个服务单元向注册中心登记自己提供的服务,包括主机与端口号、版本号、通信协议等附加信息。注册中心会按照服务名分类组织服务清单,并通过心跳机制监控清单中的服务是否可用,若不可用则从服务清单中剔除,达到排除故障服务的效果。

(3)Eureka Server

Eureka Server是Eureka的服务注册中心,负责维护集群中的服务实例信息和状态,以及给Eureka Client返回服务列表。Eureka Server支持高可用配置,可以通过多实例部署来保证服务的稳定性和可用性。Eureka Server内部有二层缓存机制来维护整个注册表,并提供了RESTful API供Eureka Client调用。

(4)Eureka Client

Eureka Client是Eureka的客户端,嵌入在业务服务的代码中,负责与Eureka Server交互,包括发送注册请求、维持心跳、拉取服务列表等。Eureka Client通过注册、心跳机制和Eureka Server同步当前客户端的状态。当Eureka Server无法访问时,Eureka Client仍然可以使用缓存中的信息找到服务提供者,但服务有更改时可能会出现信息不一致的情况。

二. 搭建Eureka服务端

(1)创建maven工程

首先,需要创建一个Maven工程,用于搭建Eureka服务端。

(2)导入依赖

在Maven工程的pom.xml文件中,需要导入Eureka Server的依赖。例如:

XML 复制代码
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>  
</dependency>
(3)配置application.yml

在application.yml文件中,需要配置Eureka Server的相关信息,如服务端口、服务名、是否向注册中心注册自己等。例如:

XML 复制代码
server:  
  port: 7001  
eureka:  
  instance:  
    hostname: localhost  
  client:  
    register-with-eureka: false  # 不向注册中心注册自己  
    fetch-registry: false        # 不从注册中心抓取服务  
    service-url:  
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
(4)创建主启动类

在主启动类上添加@EnableEurekaServer注解,以启动Eureka Server。例如:

java 复制代码
@EnableEurekaServer  
@SpringBootApplication  
public class EurekaServerApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(EurekaServerApplication.class, args);  
    }  
}
(5)启动Eureka注册中心

运行主启动类,启动Eureka注册中心。然后,可以通过浏览器访问http://localhost:7001/来查看Eureka注册中心的界面。

三. 搭建服务提供者

(1)创建maven工程

创建一个新的Maven工程,用于搭建服务提供者。

(2)导入依赖

在pom.xml文件中,导入Eureka Client的依赖和Spring Boot的启动依赖等。例如:

XML 复制代码
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  
</dependency>  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
</dependency>
(3)配置application.yml

在application.yml文件中,配置服务提供者的相关信息,如服务名、Eureka Server的地址等。例如:

XML 复制代码
server:  
  port: 8001  
spring:  
  application:  
    name: service-provider  
eureka:  
  client:  
    service-url:  
      defaultZone: http://localhost:7001/eureka
(4)创建启动类

在主启动类上添加@EnableEurekaClient注解,以启用Eureka Client。例如:

java 复制代码
@EnableEurekaClient  
@SpringBootApplication  
public class ServiceProviderApplication {
    public static void main(String[] args) {
       SpringApplication.run(ServiceProviderApplication.class, args);
    }
}
​(5)创建Controller

在服务提供者中创建一个Controller,用于对外提供服务。例如:

java 复制代码
@RestController  
public class HelloController {  
  
    @GetMapping("/hello")  
    public String hello() {  
        return "Hello from Service Provider!";  
    }  
}
(6)测试该服务

启动服务提供者,并验证其是否正确注册到Eureka Server。然后,可以使用Postman或浏览器访问http://localhost:8001/hello来测试服务。

4. 搭建服务消费者

(1)创建maven工程

创建一个新的Maven工程,用于搭建服务消费者。

(2)导入依赖

与服务提供者类似,在pom.xml文件中导入Eureka Client的依赖和Spring Boot的启动依赖等。

(3)配置application.yml

配置服务消费者的相关信息,包括服务名、Eureka Server的地址等。

XML 复制代码
server:  
  port: 9001  
spring:  
  application:  
    name: service-consumer  
eureka:  
  client:  
    service-url:  
      defaultZone: http://localhost:7001/eureka
(4)创建主启动类

在主启动类上添加@EnableEurekaClient注解,以启用Eureka Client。

java 复制代码
@EnableEurekaClient  
@SpringBootApplication  
public class ServiceConsumerApplication {  
    public static void main(String[] args) {  
        SpringApplication.run(ServiceConsumerApplication.class, args);  
    }  
}
(5)创建配置类配置远程调用

使用Spring Cloud的Feign或Ribbon等客户端负载均衡工具来配置远程调用。这里以Feign为例:

java 复制代码
@FeignClient(name = "service-provider")  
public interface HelloClient {  
    @GetMapping("/hello")  
    String hello();  
}

同时,在启动类或配置类上添加@EnableFeignClients注解来启用Feign。

(6)创建Controller

在服务消费者中创建一个Controller,用于调用服务提供者的服务。

java 复制代码
@RestController  
public class ConsumerController {  
  
    @Autowired  
    private HelloClient helloClient;  
  
    @GetMapping("/call-hello")  
    public String callHello() {  
        return helloClient.hello();  
    }  
}

5. 整体测试

启动Eureka Server、服务提供者和服务消费者。然后,使用Postman或浏览器访问http://localhost:9001/call-hello,查看是否能够成功调用服务提供者并返回预期结果。如果一切配置正确,你将看到服务消费者调用服务提供者并返回了"Hello from Service Provider!"的响应。

这样,就完成了Eureka服务治理的基本搭建和测试。

相关推荐
你喜欢喝可乐吗?16 小时前
RuoYi-Cloud 定制微服务
java·微服务·架构
武子康1 天前
Java-75 深入浅出 RPC Dubbo Java SPI机制详解:从JDK到Dubbo的插件式扩展
java·分布式·后端·spring·微服务·rpc·dubbo
mit6.8242 天前
[AI-video] 数据模型与架构 | LLM集成
开发语言·人工智能·python·微服务
SoFlu软件机器人2 天前
3 分钟生成 Spring Cloud 微服务架构,标准目录 + 依赖配置,开箱即用
spring cloud·微服务·架构
大曰编程2 天前
分布式系统高可用性设计 - 监控与日志系统
微服务
allenXer2 天前
Spring Boot测试全景指南:JUnit 5 + Testcontainers实现单元与集成测试
spring boot·微服务·log4j
William一直在路上3 天前
回顾一下Docker的基本操作
docker·容器·eureka
赵成ccc3 天前
如何进行 Docker 数据目录迁移
docker·容器·eureka
阿里云云原生3 天前
回归开源,两位 Java 和 Go 程序员分享的开源贡献指引
微服务·开源
武子康3 天前
Java-71 深入浅出 RPC Dubbo 上手 父工程配置编写 附详细POM与代码
java·分布式·程序人生·spring·微服务·rpc·dubbo