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

devtools/2024/9/24 23:21:27/

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的依赖。例如:

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

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

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。例如:

@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的启动依赖等。例如:

<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的地址等。例如:

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

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

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

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

@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的地址等。

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

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

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

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

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

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

(6)创建Controller

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

@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服务治理的基本搭建和测试。


http://www.ppmy.cn/devtools/96080.html

相关文章

Linux 开机自动挂载共享文件设置

选择一个要共享的文件 点击确定 -> 确定 启动虚拟机 执行下面的命令 /YumSource 是我选择的共享文件夹&#xff0c;自行替换自已选择的文件夹 mkdir -p /mnt/hgfs cat >> /etc/fstab << EOF .host:/YumSource /mnt/hgfs fuse.vmhgfs-fuse allow_other defaul…

Prometheus+Grafana保姆笔记(3)——监控MySQL

Prometheus Grafana 的组合在微服务项目中可以完成许多DevOps任务&#xff0c;它们共同提供了强大的监控和可视化功能。我们陆续介绍Prometheus Grafana 的相关用法。 前面我们介绍了&#xff1a; PrometheusGrafana保姆笔记&#xff08;1&#xff09;——PrometheusGrafan…

【JavaEE】锁策略和CAS

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f4b0;一.常见的的锁策略 锁策略&#xff08;Locking Strategy&#xff09;是指在多线程环境中&#xff0c;为了控制对共享资源的访问&#xff0c;确保…

MySQL基础练习题48-连续出现的数字

目录 题目 准备数据 分析数据 题目 找出所有至少连续出现三次的数字。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Logs (id int, num int)## 向表中插入数据 Truncate table Logs insert into Logs (id, num) values (1, 1) i…

LeetCode 第三十一天 2024.8.17

1. &#xff1a;打家劫舍 题目链接: 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 应用条件&#xff1a;动态规划 难点&#xff1a; # 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]表示在i这房子能投的最高金额 # 确定递推公式: dp…

音视频开发

通过多线程分别获取高分辨率(1920 * 1080)和低分辨率(1280 * 720) 初始化VI模块 初始化HIGH VENC模块 初始化LOW VENC模块 初始化RGA模块 绑定 VI和HIGH VENC 绑定 VI和RGA 创建线程 HIGH VENC处理 RGA处理 LOW VENC处理 销毁 QP原理的讲解 QP参数调节&#xff0c;指的是量化…

DotPlot 的宽高自动设置 | 线性拟合

1. 线性模型计算width和height 输入是基因集合 scRNA.markers <- FindAllMarkers(scRNA, only.pos TRUE, min.pct 0.25, logfc.threshold 0.25) #scRNAmisc[["markers"]]scRNA.markers #scRNA.markers %>% group_by(cluster) %>% top_n(n 2, wt avg_…

xss复现

目录 反射型 Ma Spaghet! Jefff Ugandan Knuckles onfocus Ricardo Milos Ah Thats Hawt location Ligma Mafia 构造函数 dom破坏 Ok, Boomer 反射型 Ma Spaghet! <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghe…