前言
Spring Cloud系列: 点击查看Spring Cloud系列文章
Spring Cloud Commons:通用抽象层
Spring Cloud将服务发现,负载平衡和断路器之类的模式带到一个通用的抽象层,可以由所有Spring Cloud客户端使用,而与实现无关(例如,使用Eureka或Consul进行的服务的发现和治理) 。
由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,比如:Netflix Eureka、Consul、Zookeeper。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。
Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能。
Spring Cloud Eureka 是一个基于 REST 的服务,并且提供了基于 Java 的客户端组件,能够非常方便地将服务注册到 Spring Cloud Eureka 中进行统一管理。
创建注册中心
下面我就使用spring-cloud-starter-netflix-eureka来创建一个服务注册中心
1、创建一个spring boot项目,添加以下依赖
<properties>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注:我的Spring boot版本为2.3.1,对应的spring-cloud版本为Hoxton.SR6。如果是其他spring boot版本,需使用对应的spring-cloud版本
注:spring-cloud-starter-eureka-server 是在1.5版本中使用的,在2.0版本中废弃,建议使用spring-cloud-starter-netflix-eureka-server
2、在启动类上添加@EnableEurekaServer注解,就可以将该项目作为SpringCloud中的注册中心了。
@SpringBootApplication
@EnableEurekaServer
public class SpringCloudDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudDemoApplication.class, args);
}
}
3、添加配置
在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.properties配置文件中增加如下信息:
#是否禁用注册自己,默认为true,服务端不需要
eureka.client.register-with-eureka=false
#是否从Eureka获取注册信息,默认为true,服务端不需要
eureka.client.fetch-registry=false
#覆盖Eureka的默认路径(默认端口是8761)
eureka.client.serviceUrl.defaultZone=http://localhost:2002/eureka/
启动项目,我这里设置了端口号为2002(根据自己的端口号来访问),访问http://localhost:2002/,看到下面的页面,说明注册中心搭建完成
Instances currently registered with Eureka:表示当前在Eureka注册的实例,因为现在还没有实例注册到eureka,所以显示为No instances available(没有可用的实例)
Instances currently registered with Eureka下的选项:
Application:实例名称,即spring.application.name或者eureka.instance.appname配置的名称,同时配置时,eureka.instance.appname优先级更高。
如果没有配置eureka.instance.appname,则使用spring.application.name的值,如果连spring.application.name都没有配置,则取unknown。
Status:实例的状态加id,up为正常。id为eureka.instance.instance-id设置的值,如果没有设置eureka.instance.instance-id,那么显示的值将是一个由Eureka自动生成的编号