SpringCloud学习之路(一) 服务的注册与发现Eureka(Finchley版本)
学习之前分析一些,现在的SpringCloud有好几个版本,每个版本需要的环境也会有一点差别.现在我知道的大概分为以下几个版本.
一、Dalston.RC1版本(简称D版本)
二、Finchley.RELEASE版本
三、SpringCloud Alibaba版本
四、Greenwich版本
具体想了解每个版本的具体优缺点请自行百度搜索。
这里只讲Finchley版本
第一步
建立一个父级工程
在其pom文件引入依赖,spring Boot版本为2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom。这一系列文章全部采用这种模式,其他文章的pom跟这个pom一样。再次说明一下,以后不再重复引入。代码如下:
<?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.scfhy</groupId>
<artifactId>sc-f-finchley</artifactId>
<version>1.0-SNAPSHOT</version>
<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>
第二步
创建model工程作为服务注册中心即Eureka Server
右键工程->创建model如下图
选择spring initialir 如下图:
建立好了之后 因为需要引入父类的pom文件包。所以需要在父类的pom里面添加这个子类。
在springCloudFinchley父工程下的pom.xml添加下面的一个配置。
第三步
然后再eureka-server子项目下添加如下的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.scfhy</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.scfhy</groupId>
<artifactId>sc-f-finchley</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
第四步
启动一个服务注册中心,需要加入注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
然后在application.yml配置文件里面添加如下配置
server:
port: 8082
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false # 表示自己就是注册中心,不用注册自己
fetchRegistry: false # 表示自己就是注册中心,不用去注册中心获取其他服务的地址
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eurka-server
第五步
启动eureka server 有些人估计会报下面这个错误。如下截图
网上很多人都说什么版本不对 要修改springboot的版本。或许他们的真的有用,但是我们需要看清楚报的是什么错误。 这个是无法启动内置Tomcat的问题。
解决办法如下:
jdk版本问题,jaxb的依赖问题,JAXB API是java EE 的API,因此在java SE 9.0 中不再包含这个 Jar 包。 java 9 中引入了模块的概念,默认情况下,Java SE中将不再包含java EE 的Jar包 而在 java 6/7/8 时关于这个API 都是捆绑在一起的。所以导入jaxb-core、jaxb-api、jaxb-impl、activation四个jar包即可,或者导入jdk8。
注:IDEA内置的jdk8也会报这个错误,只能使用自己另外安装的jdk8。
我选择了导入jaxb-core、jaxb-api、jaxb-impl、activation四个jar包 代码如下 。
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.scfhy</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.scfhy</groupId>
<artifactId>sc-f-finchley</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</project>
然后再启动eureka server工程。启动成功。
然后在浏览器打开界面。访问http://localhost:8082
如下截图 出现这个界面说明注册中心搭建成功
No application available 没有服务被发现,因为没有注册服务当然不可能有服务被发现了。