抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

简介

在微服务的项目中,服务层被拆分成很多个。那么如何处理这些服务之间的通信和管理呢?在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

启动看看

upload successful

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后启动看看。

upload successful

upload successful

由上面两张图可以看到两个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看看

upload successful

可以看到现在需要登录才能访问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/