Eureka
是 Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是spring-cloud体系中最重要最核心的组件之一。
背景介绍
Eureka
是Netflix开源的产品,这家公司的开源组件已经经过多年的生产实战验证,稳定性自然不必说,Spring-Cloud-Netflix-Eureka
是Spring-Cloud
对Netflix的Eureka的封装,它包含两部分:服务端、客户端。其中服务端是作为一个服务中心用来注册客户端服务,对注册进来的服务进行管理。
在微服务架构中这个注册发现服务中心无论在哪里都是必不可少的服务,Dubbo
中有zookeeper
、Nacos
、Redis
等,Eureka
就是Spring-Cloud
中使用较广的服务中心。
微服务架构中使用注册中心与不使用注册中心的区别就跟找房子时找中介跟自己去找的区别,想必找过房子的各位都深有体会吧!
案例实践
本案例使用Spring-Cloud Hoxton.SR5 版本
Eureka-Server
要在Spring-Cloud中使用Eureka
首先需要引入它的依赖。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
然后在启动类中添加@EnableEurekaServer
注解
@EnableEurekaServer
@SpringBootApplication
public class SpringCloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaApplication.class, args);
}
}
最后配置服务,默认配置中Eureka会将自己也注册到注册中心,我们可以通过以下配置来禁用这个行为
spring:
application:
name: spring-cloud-eureka
server:
port: 8000
eureka:
client:
register-with-eureka: false #表示是否将自己注册到Eureka Server,默认为true。
fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true。
service-url:
#设置与Eureka Server交互的地址,默认是8761端口
defaultZone: http://localhost:${server.port}/eureka/
这样配置启动后就可以看到以下页面,其上没有任何已注册的服务。
Eureka集群
上面的是单个的Eureka服务,但是作为注册中心,所有的服务调用都要通过它来调度,如果Eureka挂掉了,那么整个服务也就不可用了。这很显然是不行的,所以就需要我们给它配置集群的形式,达到一台服务挂掉还有其他的服务来替代它。
Eureka可以通过互相注册的方式来实现高可用的集群部署,我们这里配置三台服务作为示例,更多台服务是一样的原理。
我们可以通过三个配置文件,分别是application-peer1.yml
、application-peer2.yml
、application-peer3.yml
。关于SpringBoot配置文件规则还不熟悉的可以看SpringBoot配置文件详解了解下。
application-peer1.yml
spring:
application:
name: spring-cloud-eureka
server:
port: 8000
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/
instance:
hostname: peer1
application-peer2.yml
spring:
application:
name: spring-cloud-eureka
server:
port: 8001
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://peer1:8000/eureka/,http://peer3:8002/eureka/
instance:
hostname: peer2
application-peer3.yml
spring:
application:
name: spring-cloud-eureka
server:
port: 8002
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://peer2:8001/eureka/,http://peer1:8000/eureka/
instance:
hostname: peer3
然后修改hosts
文件,在文件中添加
127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3
idea多实例启动
使用idea编辑器的可以在运行的设置中开启多实例以及每次启动时添加--spring.profiles.active=peer1
、--spring.profiles.active=peer2
、--spring.profiles.active=peer3
参数。(如下图所示)
使用其他idea的可以打成jar包,使用命令行启动时添加java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
参数方式依次启动。
启动完后,访问http://localhost:8000/
就可以看到下面的页面
至此Eureka的集群配置已经完成,关于Eureka的部份也就结束了,接下来就是配合Eureka-Client以及Feign来实现微服务之间的调用。