一、 服务注册中心
使用 Spring Cloud Netflix Eureka 作为服务注册与发现模块。
1.1 创建一个 Maven 主工程(父工程)
首先创建一个主 Maven 工程,在其 pom.xml
文件引入依赖,Spring boot版本为2.0.3.RELEASE
,Spring Cloud 版本为 Finchley.RELEASE
。这个 pom.xml
文件作为父 pom.xml
文件,起到依赖版本控制
的作用,减少新建项目时依赖不一致导致一些莫名其妙的错误,其他工程继承
该父工程即可(类似与 JAVA 中的继承关系,子类继承父类后就拥有了父类所有的属性,这里叫做 Maven 父子项目
,不了解的可以搜索学习一下)。接下来所有的 工程
全部采用这种模式,以后新建的 工程就不需要导入 Spring boot 与 Spring Cloud 本版了。步骤如下:
- IDEA首页面点击 create new project,弹出如下界面:
- 点击 next,如下图,GroupId(一般填反转后公司域名)和 ArtifactId(项目名)还有 Version,这三个属性目的是标识你的项目的唯一性:
-
点击 next,以下配置按需修改:
2018-11-27_154617.png
- 修改 pom.xml 文件,注意修改打包方式,或直接 copy 下面配置文件:
<?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>
<groupId>com.abu</groupId>
<artifactId>springCloudTest</artifactId>
<version>1.0-SNAPSHOT</version>
<!--注意打包方式为 pom -->
<packaging>pom</packaging>
<name>mengma-sc-demo</name>
<description> Spring Cloud 学习实例</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<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>
- 删除 src 目录
- 把包 父工程到 本地依赖中,以便接下来子模块可以依赖,IDEA中选中 右侧
Maven Projects
如下双击install:
1.2 创建 model 工程(子工程):作为服务注册中心(Eureka server)
-
右键工程->创建model-> 选择spring initialir 如下图:
2018-11-27_155815.png
子module在父项目路径下
- 修改子项目的 pom.xml 文件让其与 父项目产生联系 (确认继承关系,删除在父项目中已经有的依赖)
<?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>
<groupId>com.abu</groupId>
<artifactId>eureka_server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka_server</name>
<description></description>
<!-- 确认继承关系 -->
<parent>
<!--父工程 gropuId-->
<groupId>com.abu</groupId>
<!--父工程 artifactId-->
<artifactId>springCloudTest</artifactId>
<!--父工程 版本-->
<version>1.0-SNAPSHOT</version>
</parent>
<!--spring cloud eureka server 必须依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
- 在父工程 pom.xml 中 添加子模块标识
<packaging>pom</packaging>
<!--添加子模块标识 !!!! -->
<modules>
<!--声明 eureka_server 为当前项目 子模块 ,以后有新的子模块添加也要在此添加-->
<module>eureka_server</module>
</modules>
1.3 启动服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加:
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run( EurekaServerApplication.class, args );
}
}
1.4 Eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳,在默认情况下Eureka server也是一个Eureka client ,必须要指定一个Eureka server,可以向自己注册即可。Eureka server的配置文件appication.yml 如下:
# 本身是注册中心,但是也需要注册,这里可以向自己注册
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
# 不在页面上显示当前 服务
register-with-eureka: false
# 为true时,可以启动,但报异常:Cannot execute request on any known server
fetch-registry: false
# 当应用上线率过低时,eureka会启动保护机制,默认确定当前服务是开启的,开发 环境中尽量关闭(设置为false)
server:
enable-self-preservation: false
# 服务名 ,很重要 ,后期 config 配置中心会以 服务名为标识找对应的 服务
spring:
application:
name: eureka
# 设置当前项目端口号
server:
port: 8761
启动工程后,访问:http://localhost:8761/,可以看到下面的页面,其中还没有发现任何服务
二、服务提供者(Eureka client )
当client向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。Eureka server 从每个client实例接收心跳消息。 如果心跳超时,则通常将该实例从注册server中删除。
-
创建 eureka client ,总体步骤一致(相当于把上面新建
eureka-server的步骤再操作一遍),唯一不同在于选择依赖,如下:
2018-11-27_162142.png
- 通过 注解@EnableEurekaClient 表明自己是一个eurekaclient。
@SpringBootApplication
@EnableEurekaClient
public class ServiceHiApplication {
public static void main(String[] args) {
SpringApplication.run( ServiceHiApplication.class, args );
}
}
- 修改配置文件
# 注册到 eureka server 配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 8762
spring:
application:
name: eurekaclient
-
启动 eureka server , eureka client ,访问 eureka client 如下
2018-11-27_162512.png
- 关于 Spring Cloud Finchley.RELEASE 版本 Spring Cloud Eureka Client 重大改变说明,主启动类在此版本中,可以不用加
@EnableEurekaClient
,默认只要引入了 Eureka client 依赖,项目启动就会自动注册到注册中心,如下:
@SpringBootApplication
//@EnableEurekaClient 此版本中注释掉也是可以的
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
网友评论