wordpress 导航网站,软件系统开发阶段任务,杭州营销型网站设计,wordpress 4.9.5注册中心概述什么是注册中心#xff1f;相当于服务之间的‘通讯录’#xff0c;记录了服务和服务地址之间的映射关系。在分布式架构中服务会注册到这里。当服务需要调用其他服务时#xff0c;就在注册中心找到其他服务的地址#xff0c;进行调用注册中心的主要作用#xf…注册中心概述什么是注册中心相当于服务之间的‘通讯录’记录了服务和服务地址之间的映射关系。在分布式架构中服务会注册到这里。当服务需要调用其他服务时就在注册中心找到其他服务的地址进行调用注册中心的主要作用注册中心一般有以下的功能服务发现服务注册/反注册保存服务提供者和调用者的关系服务订阅/取消订阅服务调用者订阅服务提供者的信息服务路由筛选整合服务提供者服务配置配置订阅服务提供者和消费者订阅微服务相关的配置配置下发主动将配置推送给提供者和消费者服务健康检测检测服务提供者的健康情况EurekaEureka是SpringCloud微服务架构中常用的注册中心其架构图如下由其架构图可以看出Eureka可以分为三部分Eureka服务端Eureka服务提供者Eureka服务消费者。其中Eureka服务端需要作为独立的服务运行而服务提供者、消费者则是需要使用EurekaClient嵌入我们自己的服务中。其运行原理是这样的当服务提供者启动时会向注册中心发送请求在注册中心注册实例。并且每隔一段时间向注册中心发送心跳注册中心会保存实例和地址的映射关系当服务消费者启动时会从注册中心拉去所有的注册信息并缓存起来。当需要调用某一个服务时。根据缓存的注册信息直接调用服务聪明的你这个时候会察觉到。既然消费者使用的是缓存的注册信息。那么一定会存在一种情况就是服务提供者这边已经宕机。这个时候消费者根据缓存的信息没有及时更新就会导致调用失败Eureka是怎么解决这个问题的呢且往下看。服务端的搭建创建工程导入坐标这里推荐使用 Spring Initializer 直接创建。选择 web 和 euraka 即可。主要引入的依赖如下org.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-netflix-eureka-server配置 application.yml 说明见注释server:port: 9000eureka:instance:hostname: localhostclient:register-with-eureka: false # 是否将自己注册到注册中心fetch-registry: false # 是否从Eureka中获取注册信息service-url: # Eureka Client 的请求地址defaultZone: http://#{eureka.instance.hostname}:#{server.port}/eureka/配置启动类启动类除了常规的 SpringBootApplication 外还要添加 EnableEurekaServer 表示开启 Eureka 服务启动项目浏览器访问 localhost:9000 出现以下页面即表示服务搭建成功注册服务到Eureka在要注册的工程中导入Eureka Client的坐标org.springframework.cloudspring-cloud-starter-netflix-eureka-client在 application.yml 中配置Eureka服务端的地址这里需要特别注意Eureka客户端配置的服务端地址使用的key是 defaultZone,不是 default_zone 如果写错会导致客户端无法注册服务进而导致客户端无法启动server:port: 9001spring:application:name: SERVICE_PROVIDER # 服务名称datasource:url: jdbc:mysql://192.168.25.128:3306/mysql?characterEncodingUTF-8useSSLfalseserverTimezoneCTTdriver-class-name: com.mysql.cj.jdbc.Driverpassword: 521username: keatseureka:client:service-url:defaultZone: http://localhost:9000/eureka/ # 刚刚在Eureka Server 配置的请求地址register-with-eureka: true # 注册到注册中心fetch-registry: false # 作为服务提供者可以不用从Eureka获取注册信息。视实际情况而定instance:prefer-ip-address: true # 使用IP地址注册在启动类加上 EnableEurekaClient 注解(SpringCloud Finchley.RELEASE 版本及之后的版本会在项目中引入EurekaClient依赖后自动开启我们使用的是最新版。因此也可以不用添加)Euraka 客户端默认每隔 30 S向服务端发送一次心跳请求如果服务端 90 S没有收到某客户端发送的请求将视为客户端宕机。会将其从服务列表剔除消费者获取和使用服务搭建服务消费者和提供者的步骤类似首先是添加 eureka-client 依赖之后配置 application.yml 如下server:port: 9002spring:application:name: SERVICE_CONSUMER # 服务名称eureka:client:service-url: # 刚刚在Eureka Server 配置的请求地址defaultZone: http://localhost:9000/eureka/fetch-registry: trueregister-with-eureka: false这样该服务就具备了从Eureka获取服务的能力那具体怎么使用呢Spring 为我们提供了一个BeanDiscoveryClient (注意需要导入org.springframework.cloud.client.discovery 包下的DiscoveryClient 而不是 netflix 包下的类)我们在需要获取服务的类里面注入该类Autowiredprivate DiscoveryClient discoveryClient;接着调用其 getInstances(String instancdName) 方法通过服务的名称获取服务列表。我们这里只注册了一个服务提供方没有搭集群所以直接使用列表第0位的服务实体。而实体提供了 getUri() 方法用于获取服务提供者的 url。接着我们用该方法替换硬编码的 url 即可完成 Eureka 的使用。核心代码如下网上的很多其他教程在这里使用的都是 getHost() : getPort() 拼接推测可能是版本比较老旧。新API既然已经提供了 getUri() 方法我们就要积极使用。这里建议读者们在使用某Bean的方法时通过打点的方式阅读一下其开放的API大概了解一下GetMapping(teacher/users)public List getAllUser(){List service_provider discoveryClient.getInstances(SERVICE_PROVIDER);ServiceInstance serviceInstance service_provider.get(0);return restTemplate.getForObject(serviceInstance.getUri() /api/v1/users, List.class);}Eureka的自我保护如上图提示表示Eureka进入了自我保护模式。自我保护模式的介绍如下Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否高于 85%如果高于 85%Eureka Server 会将这些实例保护起来让这些实例不会过期。在我看来可以用一句古成语来形容这种模式---“三人成虎” 即当越来越多的服务提供者心跳不能到达时。Eureka开始不在怀疑是提供者GG而怀疑自己了在开发环境中我们往往启动一个Eureka服务 一个 Eureka 提供者如果此时提供者正好出了问题。90S未发送心跳。但由于满足自我保护条件(这段时间失败比例为100%),Eureka不会将服务剔除。会直接导致服务消费者无法正确获取服务。因此开发环境中建议关闭其自我保护机制而在生产环境打开之, yml 配置如下eureka:server:enable-self-preservation: false # 关闭自我保护关于找一找教程网本站文章仅代表作者观点不代表本站立场所有文章非营利性免费分享。本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章希望广大程序员努力学习让我们用科技改变世界。[SpringCloud五大神兽之Eureka]http://www.zyiz.net/tech/detail-107318.html