Spring-cloud 微服务 服务注册_服务发现-Eureka

打印 上一主题 下一主题

主题 578|帖子 578|积分 1734

一、Eureka

Eureka是Netflix开发的一个服务注册和发现框架,通常被用于构建微服务架构中的服务管理体系。作为Spring Cloud Netflix组件之一,Eureka被广泛用于Spring Cloud项目中来实现服务的注册与发现。
核心概念



  • 服务注册中心(Eureka Server): 提供服务注册和发现的服务器。各个微服务启动时,会将自己的网络地址注册到Eureka Server中,这样Eureka Server中便拥有了所有服务实例的信息。
  • 服务提供者(Service Provider): 微服务实例,它将自己的服务信息注册到Eureka Server,以供其他服务查询和调用。
  • 服务消耗者(Service Consumer): 需要调用其他微服务的客户端,它从Eureka Server中获取所需服务的网络位置信息后,才能进行服务调用。
工作原理


  • 服务注册: 当服务提供者启动时,它会向Eureka Server发送自己的服务信息(如服务名称、主机名、端口等),并在Eureka Server中注册。
  • 服务同步: 在Eureka集群模式下,各个Eureka Server之间会相互复制注册信息,确保数据的一致性。
  • 服务续约: 服务提供者会每隔肯定时间(默认30秒)向Eureka Server发送心跳,以续约其在注册中心的存活状态。如果Eureka Server在肯定时间内(默认90秒)没有吸收到某个服务实例的心跳,它将会从服务注册表中移除该实例。
  • 服务下线: 当服务提供者正常关闭时,它会向Eureka Server发送服务下线请求,Eureka Server吸收到请求后将该服务实例从注册表中删除。
  • 服务获取: 服务消耗者从Eureka Server获取注册表信息,并缓存到本地。服务调用时,消耗者通过本地缓存的信息来选择符合的服务实例进行调用。
特点



  • 自我保护机制: Eureka Server在检测到网络故障导致服务实例心跳失败比例过高时,会进入自我保护模式,此时不会剔除任何服务实例,以免因网络分区问题导致大量服务下线,从而保持服务的高可用。
  • 负载平衡: Eureka客户端内置了负载平衡机制,可以在多个服务实例之间进行智能平衡调用。
  • 易于集成和利用: 与Spring Cloud体系集成紧密,设置简单,易于扩展和维护。
Eureka通过这些机制,有用地实现了服务管理,进步了微服务架构的稳固性和弹性。
二、CAP理论

CAP理论是分布式体系中一个非常重要的概念,由加州大学伯克利分校的计算机科学家Eric Brewer在2000年提出。CAP代表一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance),这三个属性在分布式体系的筹划中至关重要。理论指出,一个分布式体系最多只能同时满意这三个属性中的两个。
CAP三要素


  • 一致性(Consistency): 所有节点在同一时间具有相同的数据。在进行过某项更新的操纵之后,任何后续的访问都将返回最新的数据,大概是错误的信息。这种一致性是逻辑一致性,并非所有节点在同一时刻的物理数据一致性。
  • 可用性(Availability): 每个请求都能在有限的时间内吸收到一个相应,不论个别的节点故障怎样。相应可能是最新的数据,也可能不是,但是必须是有用的数据。
  • 分区容忍性(Partition tolerance): 体系可以或许在任何网络分区发生的环境下继承运行。网络分区意味着网络中任意信息的丢失。一个具备分区容忍性的体系可以在任何网络分区后继承提供服务。
理论的现实应用

在现实应用中,分布式体系通常要在一致性和可用性之间做衡量,因为分区容忍性在当代网络环境下是一个必须要保证的属性(否则体系的某个部分可能由于网络故障而被孤立)。


  • CA(一致性和可用性): 如果体系不需要分区容忍性,那么体系可以在不考虑网络分割的环境下,同时保证一致性和可用性。但这样的体系在现实中较少见,因为大多数网络环境都不能保证完全不发生分区。
  • CP(一致性和分区容忍性): 体系在遇到网络分区时,仍然能保证数据的一致性,但可能牺牲部分可用性。例如,某些节点可能因为无法确定命据的最新状态而拒绝服务。
  • AP(可用性和分区容忍性): 体系在网络分区发生时依然可以或许对外提供服务,但不保证所有节点的数据一致性。最终一致性(eventual consistency)是AP体系常见的数据一致性模型。
结论

CAP理论提供了一个有用的框架来理解不同分布式体系筹划所面临的衡量。固然理论指出无法同时实现三者,但现实应用中,体系筹划者通常会根据业务需求的优先级来动态调整一致性和可用性的级别,同时尽量保持体系对分区的容忍性。
三、在spring boot构建的spring cloud 项目中 怎样创建Eureka-server

Spring Boot中创建一个Eureka Server非常直接,主要分为几个步骤:添加依靠、设置应用、启用Eureka Server,然后运行它。下面是详细的步骤:
1. 创建Spring Boot项目

首先,你需要一个基本的Spring Boot项目。可以利用Spring Initializr来快速天生项目结构。
2. 添加依靠

在项目的pom.xml文件中,添加Eureka Server的依靠。如果你正在利用Maven,可以添加如下依靠:
  1. <dependencies>
  2.     <!-- Eureka Server -->
  3.     <dependency>
  4.         <groupId>org.springframework.cloud</groupId>
  5.         <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  6.     </dependency>
  7.     <!-- Spring Boot Starter Web -->
  8.     <dependency>
  9.         <groupId>org.springframework.boot</groupId>
  10.         <artifactId>spring-boot-starter-web</artifactId>
  11.     </dependency>
  12.     <!-- 添加Spring Boot Starter Test,用于测试 -->
  13.     <dependency>
  14.         <groupId>org.springframework.boot</groupId>
  15.         <artifactId>spring-boot-starter-test</artifactId>
  16.         <scope>test</scope>
  17.     </dependency>
  18. </dependencies>
  19. <dependencyManagement>
  20.     <dependencies>
  21.         <dependency>
  22.             <groupId>org.springframework.cloud</groupId>
  23.             <artifactId>spring-cloud-dependencies</artifactId>
  24.             <version>${spring-cloud.version}</version>
  25.             <type>pom</type>
  26.             <scope>import</scope>
  27.         </dependency>
  28.     </dependencies>
  29. </dependencyManagement>
复制代码
这里的${spring-cloud.version}需要更换为当前稳固的Spring Cloud版本,例如2020.0.3。请访问Spring Cloud官方文档查看最新版本。
3. 设置Eureka Server

在你的Spring Boot项目中的application.properties或application.yml文件中添加Eureka的基本设置:
如果是application.properties:
  1. server.port=8761
  2. eureka.client.register-with-eureka=false
  3. eureka.client.fetch-registry=false
  4. eureka.instance.hostname=localhost
复制代码
如果是application.yml:
  1. server:
  2.   port: 8761
  3. eureka:
  4.   client:
  5.     register-with-eureka: false
  6.     fetch-registry: false
  7.   instance:
  8.     hostname: localhost
复制代码
这些设置设定了Eureka Server的端口为8761,并告诉Eureka Server它自己不是一个客户端(不需要将自己注册到其他Eureka Server上)。
4. 启用Eureka Server

在你的Spring Boot应用的主类上添加@EnableEurekaServer注解来启用Eureka Server功能:
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  4. @SpringBootApplication
  5. @EnableEurekaServer
  6. public class EurekaServerApplication {
  7.     public static void main(String[] args) {
  8.         SpringApplication.run(EurekaServerApplication.class, args);
  9.     }
  10. }
复制代码
如今,一切都设置好了,你只需要运行这个Spring Boot应用。可以直接在IDE中运行,大概通过下令行利用Maven或Gradle构建并运行。
启动后,访问http://localhost:8761,你应该能看到Eureka的控制台,这表示你的Eureka Server已经正常运行。
以上就是在Spring Boot项目中设置Eureka Server的基本步骤。这样设置后,你可以开始将其他微服务注册到这个Eureka Server上了。
四、服务注册与服务发现
要实现服务注册和发现的详细代码,我可以给你展示怎样在一个利用Spring Cloud和Eureka的环境中进行设置和编码。这里包罗了怎样创建Eureka服务器、服务提供者和服务消耗者的示例代码。
步骤1:设置Eureka服务器

我之前已经形貌了怎样设置一个Eureka服务器。这里我们只关注代码部分。在Spring Boot应用的主类中利用@EnableEurekaServer注解来激活Eureka服务器。
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  4. @SpringBootApplication
  5. @EnableEurekaServer
  6. public class EurekaServerApplication {
  7.     public static void main(String[] args) {
  8.         SpringApplication.run(EurekaServerApplication.class, args);
  9.     }
  10. }
复制代码
步骤2:创建服务提供者

服务提供者会注册自己到Eureka服务器。这需要在pom.xml中添加Eureka客户端依靠,然后在Spring Boot的主类中利用@EnableDiscoveryClient注解。
  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4. </dependency>
复制代码
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  4. @SpringBootApplication
  5. @EnableDiscoveryClient
  6. public class ServiceProviderApplication {
  7.     public static void main(String[] args) {
  8.         SpringApplication.run(ServiceProviderApplication.class, args);
  9.     }
  10. }
复制代码
  1. import org.springframework.web.bind.annotation.GetMapping;
  2. import org.springframework.web.bind.annotation.RestController;
  3. @RestController
  4. public class ServiceController {
  5.     @GetMapping("/service")
  6.     public String service() {
  7.         return "Hello from Service Provider";
  8.     }
  9. }
复制代码
步骤3:创建服务消耗者

服务消耗者同样需要添加Eureka客户端依靠,并在主类中利用@EnableDiscoveryClient。然后,利用RestTemplate或Feign客户端从Eureka获取服务并进行调用。
添加依靠(如果利用Feign):
  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-openfeign</artifactId>
  4. </dependency>
复制代码
  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.openfeign.EnableFeignClients;
  4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  5. @SpringBootApplication
  6. @EnableDiscoveryClient
  7. @EnableFeignClients
  8. public class ServiceConsumerApplication {
  9.     public static void main(String[] args) {
  10.         SpringApplication.run(ServiceConsumerApplication.class, args);
  11.     }
  12. }
复制代码
  1. import org.springframework.cloud.openfeign.FeignClient;
  2. import org.springframework.web.bind.annotation.GetMapping;
  3. @FeignClient(name = "service-provider")
  4. public interface ServiceProviderClient {
  5.     @GetMapping("/service")
  6.     String getService();
  7. }
  8. @RestController
  9. public class ServiceController {
  10.     @Autowired
  11.     private ServiceProviderClient serviceProviderClient;
  12.     @GetMapping("/consume")
  13.     public String consume() {
  14.         return serviceProviderClient.getService();
  15.     }
  16. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表