本篇文章, 很浅显的一步步讲解如何搭建一个能运行的 springcloud 项目(带所有操作截图). 相信! 看完本篇之后, 你会觉得 springcloud 搭建如此简单~~~~
一, Eureka 简介:
1.1 什么是 eureka
Eureka 是一个基于 REST 的服务, 主要用于 AWS 云中的定位服务, 以实现中间层服务器的负载平衡和故障转移, 在 Spring Cloud 微服务架构中通常用作注册中心, 我们称这个服务为 Eureka Server, 还有一个与之交互的客户端称之为 Eureka Client.
1.2 eureka 的功能
Eureka ,Consul ,Zookeepe, 是 Springcloud 支持很轻松地实现服务的注册和发现功能的组件. 看过我上一章博客的同学一定知道 Eureka,Hystrix ,Ribbon,Zuul, 都是 Netflix 公司开源的, 一起被称为 Spring Cloud Netflix, 所以 Eureka 是 Spring Cloud 首选推荐的服务注册与发现组件.
ps : 但是 Eureka 2.0 开源工作宣告停止, 所以不管后期 Eureka 如何发展, 但是对 springcloud 的影响都不是很大, 毕竟还有 Consul ,Zookeepe 可以选择.
1.3 eureka 服务注册与服务发现
服务发现有两种模式: 一种是客户端发现模式, 一种是服务端发现模式. Eureka 采用的是客户端发现模式. Eureka Client 需要每 30 秒给 Eureka Server 发一次心跳, 同时更新 Server 上最新的注册信息到本地, 如果 Server 多次没有收到来自客户端的心跳, 那么在 90 秒内会被 Server 上剔除.
二, 搭建第一个 spring cloud 项目
2.1 项目搭建环境
本章及后面章节, 我们使用的开发环境是 spring tool suite (sts) + maven (当然你也可以使用 IDEA + Gradle, 目前使用的公司也很多).
2.2 新建一个 Eureka 项目
根据步骤一步一步搭建完后, 项目结构如下: 图中标红的地方, 就是我们需要修改的地方.
图片 1.PNG
大家记住这个项目结构呦, 下面的步骤会跟上面的项目结构相对应, 所以对照起来学习, 理解更加容易~
第一步 : 新建一个 maven 项目, 命名为 springcloud. 这个 maven 项目没有什么业务功能, 但是工作中都会新建一个这样的项目目录, 我个人觉得主要是为了管理及配置方便:
1. 工作中, 我们整个项目的名称就是这个 maven 项目的名称, 在 SVN 中拉取项目下, 只要拉这个主工程的分支就行了.
它的 pom 文件定义为父 pom, 其它 module 工程可以继承该 pom, 所以很多 module 工程共用的配置, 就可以放到它的 pom 中.
pom 文件配置如下:
ps: 大家要关注下面的 < modules > 配置, 后期新增的模块, 都会加到父 pom 中来, 所以不会每次都贴这个父 pom 的配置了.
- <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.4.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.haly</groupId>
- <artifactId>springcloud</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>pom</packaging>
- <name>springcloud</name>
- <url>http://maven.apache.org</url>
- <modules>
- <module>springcloud-eureka-client</module>
- <module>springcloud-eureka-server</module>
- </modules>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <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>
第二步 : 新建 eureka 服务模块
File -> New -> spring starter project -> springcloud-eureka-server
image
勾选, eureka server
image
修改 springcloud-eureka-server 模块中的 pom.xml 文件如下:
- <parent > 标签就是引入我们上面配置的父 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>
- <parent>
- <groupId>com.haly</groupId>
- <artifactId>springcloud</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </parent>
- <groupId>com.haly</groupId>
- <artifactId>springcloud-eureka-server</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>springcloud-eureka-server</name>
- <description > 新建一个 springcloud 项目</description>
- <properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
- </properties>
- <dependencies>
- <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>
- </project>
第三步: 修改 springcloud-eureka-server 模块的 application.properties 配置文件
在 application.properties 文件中加入 eureka 的配置项, 现在我们使用的是. properties 格式, 其实工作中我们更加喜欢用. YAML 格式, 只是语法不一样, 有兴趣的同学可以去了解 YAML 格式配置.
- # 设置的 eureka 端口号
- server.port=8761
- # 设置 eureka 的主机地址
- eureka.instance.hostname=localhost
- # 表示是否将自己注册到 Eureka Server, 默认为 true. 由于当前应用就是 Eureka Server, 故而设置为 false
- eureka.client.registerWithEureka=false
- # 表示是否从 Eureka Server 获取注册信息, 默认为 true. 因为这是一个单点的 Eureka Server, 不需要同步其他的 Eureka Server 节点的数据, 故而设置为 false
- eureka.client.fetchRegistry=false
- #Eureka server 地址, 查询服务和注册服务都需要依赖这个地址, 多个地址可用逗号 (英文的) 分割
- eureka.client.serviceUrl.defaultZone=http://${
- eureka.instance.hostname
- }:${
- server.port
- }/eureka/
- # 服务模块名称
- spring.application.name=springcloud-eureka-server
第四步: 启动类上加 @EnableEurekaServer 注解
SpringcloudEurekaServerApplication 类上加上 @EnableEurekaServer 注解, 表示这个类为 Eureka Server 类, 虽然注解配置简单, 但是这个注解底层原理, 还是做了很多事的.
ps : 如果 @EnableEurekaServer 注解不可用, 那可能是 SpringCloud 版本不对, 可尝试去父 pom.xml 文件中修改下版本 version 即可.
- package com.example.demo;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
- @EnableEurekaServer
- @SpringBootApplication
- public class SpringcloudEurekaServerApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringcloudEurekaServerApplication.class, args);
- }
- }
第五步 : 启动 SpringcloudEurekaServerApplication 服务
在 SpringcloudEurekaServerApplication 类上右键 Run as -> spring boot App, 启动项目.
启动项目成功后, 在浏览器中输入 http://localhost:8761, 我们可以看到如下页面
image
目前上图红框中, 没有 eureka 客户端注册到当前的 eureka 上, 接下来, 我们创建一个 eureka 客户端.
第六步: 新建 eureka 客户端模块
File -> New -> spring starter project -> springcloud-eureka-client
新建模块的步骤和上面建 eureka 服务模块一致, 这里我就不截图了, 只是取名字不一样. 然后不勾选 eureka server
修改 springcloud-eureka-client 模块中, 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>
- <parent>
- <groupId>com.haly</groupId>
- <artifactId>springcloud</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </parent>
- <groupId>com.haly</groupId>
- <artifactId>springcloud-eureka-client</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>springcloud-eureka-client</name>
- <description > 新建一个 springcloud 项目</description>
- <dependencies>
- <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-web</artifactId>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
第七步: 修改 springcloud-eureka-client 模块的 application.properties 配置文件
ps: spring.application.name 这个配置很重要, eureka 可视化窗口上显示的就是这个名字, 以后服务与服务之间相互调用一般都是根据这个 name.
- # 服务端口号
- server.port=9300
- # 服务名称
- spring.application.name=springcloud-eureka-client
- # 注册到的 eureka 服务地址
- eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
第八步: eureka 客户端启动类上加 @EnableEurekaClient 注解
通过注解 @EnableEurekaClient 表明自己是一个 eurekaclient, 可以注入到对应配置的 eureka 上
- package com.haly.springcloud;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
- @SpringBootApplication
- @EnableEurekaClient
- public class SpringcloudEurekaClientApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringcloudEurekaClientApplication.class, args);
- }
- }
第九步: 在 SpringcloudEurekaClientApplication 类上右键 Run as -> spring boot App, 启动项目.
启动项目成功后, 在浏览器中输入 http://localhost:8761, 我们可以看到如下页面 , 红色框标记的地方, 出现了 Eureka Client 的服务名称(我们在 application.properties 中配置的名字)
image
第十步: 测试 springcloud-eureka-client 中是否可以正常使用
新建一个业务类 ClientTest, 类上使用注解 @RestController
@RestController 注解相当于 @ResponseBody + @Controller 合在一起的作用.
- package com.haly.springcloud;
- import org.springframework.Web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.RequestParam;
- import org.springframework.Web.bind.annotation.RestController;
- @RestController
- public class ClientTest {
- @RequestMapping("/test")
- public String home(@RequestParam(value = "name", defaultValue = "young 码农") String name) {
- return name + ",wellcom to springcloud!";
- }
- }
这时打开 浏览器, 输入 http://localhost:9300/test?name=young 码农, 页面结果如下, 证明我们的项目搭建成功了, 可以正常写业务逻辑了.
image
如果你在搭建的过程中, 出现问题, 无法正常运行, 可以评论区留言, 我会尽全力解答~
来源: http://www.jianshu.com/p/19eb992128fd