本文主要介绍服务注册发现的基本用法和集成
SpringCloud五大常用组件:
服务注册发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config
分布式服务必然要面临的几大主要问题:
1.服务管理
2.如何自动注册和发现
3.如何实现状态监管
4.如何实现动态路由
5.服务如何实现负载均衡
6.服务如何解决容灾问题
7.服务如何实现统一配置
以上的问题,我们都将在服务注册发现中心来解决。
首先来介绍下常见的注册中心:
由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务注册中心,比如:Netflix Eureka、Consul、Zookeeper,Alibaba Nacos。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。
Eureka定义:
Eureka是Netflix开发的服务发现框架,是Netflix的一个子模块,也是核心模块之一,Eureka本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现和注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务,而不需要修改服务调用的配置文件了,功能类似于dubbo的注册中心,比如zookeeper。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
实现原理:
Eureka是一个服务注册与发现组件,简单说就是用来统一管理微服务的通信地址,它包含了EurekaServer服务端(也叫注册中心)和EurekaClient客户端两部分组成,EureakServer是独立的服务,而EurekaClient需要集成到每个微服务中。
微服务(EurekaClient)在启动的时候会向EureakServer提交自己的通信地址清单,如:服务名、ip、端口,在EurekaServer会形成一个微服务的通信地址列表,这叫服务注册。
微服务(EurekaClient)会定期的从EureakServer拉取一份微服务通信地址列表缓存到本地。一个微服务在向另一个微服务发起调用的时候会根据目标服务的服务名找到其通信地址清单,然后基于HTTP协议向目标服务发起请求,这叫服务发现。
另外,微服务(EurekaClient)采用“心跳”机制向EureakServer发请求进行服务续约,其实就是定时向EureakServer发请求报告自己的健康状况,告诉EureakServer自己还活着,不要把自己从服务地址清单中掉,那么当微服务(EurekaClient)宕机未向EureakServer续约,或者续约请求超时,注册中心机会从地址清单中剔除该续约失败的服务。
Eureka注册中心搭建步骤:
1.导入maven依赖
<!--Eureka服务端支持-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.yml配置
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false #是否要注册到eureka
fetchRegistry: false #表示是否从Eureka Server获取注册信息
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置
3.主启动类
@SpringBootApplication
@EnableEurekaServer //标识是eureka服务端
public class EnrekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EnrekaServerApplication.class,args);
}
}
4.启动并测试
启动服务并访问: 主机:端口号
5.注意事项-自我保护引发的错误
Eureka自我保护机制导致,不影响使用。
服务提供者注册到Eureka
1.导入maven依赖
<!--eureka客户端支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.yml配置
eureka:
client:
service-url:
defaultZone: http://localhost:8888/eureka #告诉服务提供者要把服务注册到哪儿
instance:
prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称
ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找
3.SpringBoot启动类启用Eureka
@SpringBootApplication
@EnableEurekaClient //表示是eureka的客户端
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
}
}
到此,基础的Eureka服务就已经搭建完成了。
更多推荐
SpringCloud五大组件之服务发现-Netflix Eureka
发布评论