企业建站网站认证,微信插件大全下载,用什么开发手机网站,建筑方案设计收费标准服务注册中心 Eureka
Spring Cloud Eureka 是 Netflix 公司开发的注册发现组件#xff0c;本身是一个基于 REST 的服务。提供注册与发现#xff0c;同时还提供了负载均衡、故障转移等能力。
Eureka 有 3 个角色 服务中心#xff08;Eureka Server#xff09;#xff1a;…服务注册中心 Eureka
Spring Cloud Eureka 是 Netflix 公司开发的注册发现组件本身是一个基于 REST 的服务。提供注册与发现同时还提供了负载均衡、故障转移等能力。
Eureka 有 3 个角色 服务中心Eureka Server服务器端。它提供服务的注册和发现功能即实现服务的治理。服务提供者Service Provider服务提供者。它将自身服务注册到 服务中心以便 服务消费者 能够通过服务器提供的服务清单服务注册列表来调用它。服务消费者Service Consumer服务消费者。它从 服务中心 获取已注册的服务列表从而消费服务。 Eureka 是 AP 架构可用性和分区容错性Zookeeper 是 CP 架构一致性和分区容错性。Eueka 优先保证服务的可用性Zookeeper 在 Master 节点因为网络故障与其他节点失去联系时剩余节点选取 leader 的时间太长这就导致在选举期间注册服务瘫痪。 1. 搭建单机Eureka注册中心
首先需要创建一个 spring-cloud 工程删除 src 目录然后在 pom.xml 文件中加入以下依赖
!-- 统一管理jar包版本 --
propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetspring-cloud.version2021.0.0/spring-cloud.versionspring-boot.version2.6.3/spring-boot.version
/properties
!-- 子模块继承之后,提供作用:锁定版本,子modlue不用写groupId和version --
dependencyManagementdependencies!--spring boot 2.6.3--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion${spring-boot.version}/versiontypepom/typescopeimport/scope/dependency!--spring cloud 2021.0.0--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement创建 eureka-server-7001 模块然后在 pom.xml 文件中加入以下依赖
!-- 服务注册发现Eureka--
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId
/dependency写 application.yaml 配置文件具体如下
server:port: 7001
eureka:instance:# eureka服务端的实例名字hostname: localhostclient:# 是否将自己注册到eureka serverregister-with-eureka: false# 是否从eureka server获取注册的服务信息fetch-registry: false# 设置与eureka server交互的地址service-url:defalutZone: http://${eureka.instance.hostname}:${server.port}/eureka/最后在启动类上加上 EnableEurekaServer 注解即可
EnableEurekaServer启动访问 localhost:7001 即可访问到 Eureka 注册中心的界面。
2. 创建服务提供者与服务消费者
创建服务提供者 provider-8001 和服务消费者 consumer-80 模块然后在 pom.xml 文件中加入以下依赖
!-- 引入Eureka 客户端依赖 --
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency服务提供者和消费者的依赖是一样的都是 eureka-client。 写 application.yaml 配置文件具体如下
server:port: 8001
spring:application:name: cloud-provider-8001
eureka:client:# eureka服务地址service-url:defaultZone: http://localhost:7001/eureka/server:port: 80
spring:application:name: cloud-consumer-80
eureka:client:service-url:defaultZone: http://localhost:7001/eureka/最后在启动类上面加 EnableEurekaClient 注解即可。
EnableEurekaClient先启动 Eureka 注册中心然后在分别启动服务提供者和服务消费者即可在 Eureka 服务注册中心看到相关信息。
3. Eureka 注册中心界面说明
访问上面我们搭建的注册中心localhost:7001界面如下 其中最重要的是中间服务信息的那一栏实例的状态有以下几种
UP服务正常运行特殊情况当进入自我保护模式所有的服务依然是 UP 状态所以需要做好熔断重试等容错机制应对灾难性网络出错情况OUT_OF_SERVICE不再提供服务其他的 Eureka Client 将调用不到该服务一般有人为的调用接口设置的如强制下线。UNKNOWN未知状态STARTING表示服务正在启动中DOWN表示服务已经宕机无法继续提供服务
4. 服务自保和服务剔除机制
服务自保机制Service Self-Preservation Mechanism是指 Eureka Server 中的一种机制用于保护在 Eureka 注册中心上注册的微服务实例免受意外删除的影响。当微服务实例在心跳超时时间内没有发送心跳信号给 Eureka Server 时Eureka Server 不会立即将其从服务注册表中删除而是认为该实例可能处于网络故障等临时异常情况会将其保留在注册表中提供一定的自我保护防止误删健康的实例。这样可以避免因网络抖动、服务器负载或其他临时问题导致服务实例被误删从而提高服务的稳定性和可用性。
服务剔除机制Service Eviction Mechanism与服务自保相对应是指当服务实例连续长时间未发送心跳信号、或注册中心发现某个服务实例心跳连续失败的次数超过一定阈值时Eureka Server 会将该服务实例从服务注册表中剔除。通过服务剔除机制可以排除不健康、异常或故障状态的服务实例防止其他服务继续调用故障的实例减少错误的传播范围提高系统的稳定性。
Eureka 中的服务自保机制是为了保护健康、可能出现临时异常的服务实例免受误删的影响而服务剔除机制则是为了及时剔除不健康、长时间未发送心跳或心跳连续失败的服务实例保障整个服务治理系统的正常运行。这两个机制的存在都是为了提高服务的可靠性和稳定性。
服务自保是默认开启的可以使用以下配置来关闭在 Eureka Server 的 application.yaml 配置文件中加入以下配置
eureka: server:# 参数来关闭保护机制,已确保注册中心可以将不可用的实例正确剔除,默认为trueenable-self-preservation: false5. Actuator 微服务信息完善
SpringCloud 体系里的服务实体向 Eureka 注册时注册名默认是 IP名:应用名:应用端口名。
我们可以通过 actuator 来修改完善注册名在服务提供者或消费者的 pom.xml 文件中加入以下配置
!-- actuator监控信息完善 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId
/dependency然后在 application.yaml 配置文件中加入以下配置
eureka:instance:# 实例名称instance-id: cloud-consumer01-806. 服务注册发现 Discovery
注册进入 Eureka 里面的微服务可以通过服务发现来获取该服务的信息。
在服务提供者模块controller类具体如下
Slf4j
RestController
RequestMapping(/provider)
public class ProviderController {Autowiredprivate DiscoveryClient discoveryClient;GetMapping(/discovery)public Object discovery() {// 获取所有微服务信息ListString services discoveryClient.getServices();for (String service : services) {log.info(service:{}, service);}return this.discoveryClient;}/*** 供消费者调用*/GetMapping(/index)public String getMsg() {return success;}
}RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具它提供了常见的REST请求方案的模版例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange() 以及 execute()。
在服务消费者模块中添加配置类具体如下
Configuration
public class CloudConfig {LoadBalancedBeanpublic RestTemplate restTemplate() {return new RestTemplate();}
}最后在服务消费者模块添加对应调用方法具体如下
RestController
RequestMapping(/consumer)
public class ConsumerController {Autowiredprivate RestTemplate restTemplate;GetMapping(/index)public String index() {// 远程微服务调用地址: 微服务名称String host http://cloud-provider-8001;// 具体URLString url /provider/index;// 发起远程调用// getForObject: 返回响应体中数据转化成的对象, 可以理解为json// getForEntity: 返回的是ResponseEntity的对象包含了一些重要的信息return restTemplate.getForObject(host url, String.class);}
}浏览器访问http://localhost:80/consumer/index 地址即出现在服务提供者模块中返回的 “success” 字符串。