那么本文我主要想介绍下在Spring Cloud中使用Eureka搭建一个服务注册中心,然后再向其中注册服务。由于Spring Cloud是在Spring Boot的基础上构建分布式服务的,所以需要有一点Spring Boot的基础知识,如果小伙伴们对Spring Boot尚不太熟悉的话,可以先参考下http://blog.didispace.com/categories/Spring-Boot/。
上面所提到的是阅读本文所需要具备的基础知识,在此基础之上我们来看看怎么样利用Spring Cloud中的Eureka来搭建服务注册中心。
服务注册中心
创建一个普通的spring boot 项目
首先我们需要创建一个普通的spring boot项目,并且命名为eureka-service。对eureka-service项目添加eureka的依赖添,添加完依赖如下显示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cn</groupId>
<artifactId>eureka-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-service</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RC2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
eureka的依赖主要参考了Eureka官网的 http://projects.spring.io/spring-cloud/。
启动注册中心
启动注册中心的配置非常简单,只需要在spring boot入口类中添加@EnableEurekaServer注解即可,如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServiceApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServiceApplication.class, args);
}
}
启动类配置完后,需要进行服务注册中心进行一些简单的配置。如下:
#端口号
server.port=1000
#IP地址
server.ip=127.0.0.1
#服务名称
eureka.instance.hostname=eureka-service
#是否开启自己注册自己,默认是true,false表示关闭
eureka.client.register-with-eureka=false
#是否去检索其他服务,true表示检索,false不检索
eureka.client.fetch-registry=false
#eureka默认访问地址
eureka.client.service-url.defaultZone=http://${server.ip}:${server.port}/eureka/
测试
看到以下页面说明注册中心已经搭建好了。测试结果如下:
服务注册者
现在有了服务注册中心后,我们可以考虑想服务注册中心进行注册。创建一个简单的spring boot工程。
工程创建好后进行添加对于的eureka依赖。如下显示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<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-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在spring cloud2.0以后的版本中可以不需要在启动类中添加@EnableEurekaClient注解,没有强制性要求。启动类如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
//@EnableEurekaClient
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
在.properties文件中添加对应的配置:
server.port=1001
server.ip=127.0.0.1
spring.application.name=provider-service
#注册中心注册地址
eureka.client.service-url.defaultZone=http://${server.ip}:1000/eureka
测试
我们也是可以看见启动控制台打印的日志
小结
如此我们就搭建好了一个注册中心,同时也提供了一个服务注册者。但是我们这样子会存在一个问题。就是我们这是一个单节点的注册中心,如果注册中心发生故障,那么我们所有的服务都会瘫痪。所有在实际应用中,我们需要搭建高可用的注册中心。对于高可用的注册中心我们接下来的文章会进行介绍。