简介
在微服务的项目中,服务层被拆分成很多个。那么如何处理这些服务之间的通信和管理呢?在Spring cloud中使用Eureka来提供服务注册中心来管理微服务信息。
Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka提
供服务端与客户端,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。服务端和客户端均采用Java语言编写。
环境
- SpringBoot:2.2.5.RELEASE
- Java:1.8
- SpringCloud:Hoxton.SR3
- Maven:3.3.9
Eureka Server尝试
依赖
首先在父工程的pom.xml添加
1 2 3 4 5 6 7
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency>
|
然后在子工程(eureka)里的pom.xml添加
1 2 3 4
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
|
启动类
1 2 3 4 5 6 7 8 9
| @EnableEurekaServer//声明是Eureka服务 @SpringBootApplication public class EurekaApplication {
public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }
}
|
application.yml文件配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| server: port: 8100 spring: application: name: app-eureka-center
eureka: instance: #注册中心地址 hostname: 127.0.0.1 client: service-url: #客户端调用地址 defaultZone: http://${eureka.instance.hostname}:8100/eureka/ #是否将自己注册到eureka中,该应用不用因为他自己就是注册中心 register-with-eureka: false #是否从注册中心中获得信息,原因同上 fetch-registry: false server: enable-self-preservation: false eviction-interval-timer-in-ms: 3000
|
启动看看
Eureka的高可用
在实际的生产环境中单机的Eureka Server并不适合线上环境。如果它宕机了,会影响到整个系统的可用性,因此,在生产环境中,通常会部署一个高可用的Eureka Server集群。Eureka Server可以运行多个实例并且相互注册的方式来实现高可用部署。
构建Eureka集群
application.yml配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| spring: application: #应用程序名 name: app-eureka-center
--- spring: profiles: eureka-node1 server: port: 8100 eureka: instance: #注册中心地址 hostname: 127.0.0.1 client: service-url: #客户端调用地址 defaultZone: http://${eureka.instance.hostname}:8101/eureka/ #是否将自己注册到eureka中 register-with-eureka: true #是否从注册中心中获得信息 fetch-registry: true
--- spring: profiles: eureka-node2 server: port: 8101 eureka: instance: #注册中心地址 hostname: 127.0.0.1 client: service-url: #客户端调用地址 defaultZone: http://${eureka.instance.hostname}:8100/eureka/ #是否将自己注册到eureka中 register-with-eureka: true #是否从注册中心中获得信息 fetch-registry: true
|
在上面的配置文件中,是使用分隔符(—)来把它分为三部分,在第二部分和第三部分分别定义了所属的spring.profiles。然后分别设置profiles后启动看看。
由上面两张图可以看到两个Eureka节点互相注册拉。
用户认证
在Eureka Server中默认是允许匿名访问,既不需要账户密码就可以登录查看,这就有点不安全拉。所以我们搞一个需要登录才能访问的Eureka Server。
application.yml配置文件
1 2 3 4 5 6 7 8
| spring: application: #应用程序名 name: app-eureka-center security: user: name: root password: root
|
启动Eureka Server看看
可以看到现在需要登录才能访问Eureka Server端口了。
Eureka Client尝试
依赖
在父工程下创建一个子工程order,并在pom.xml中配置Eureka Client的依赖。
1 2 3 4
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
|
application.yml
1 2 3 4 5 6 7 8 9
| server: port: 8300 spring: application: name: app-order eureka: client: service-url: defaultZone: http://127.0.0.1:8100/eureka/
|