一、spring cloud简介
1.1 什么是SpringCloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、 熔断器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并 没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框 架组合起来,通过Spring Boot风格进行再封装。屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
1.2 SpringCloud与SpringBoot的关系
Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring Boot来实现的,Spring Boot可以离开Spring Cloud独立使用,但是Spring Cloud离不开Spring Boot,属于依赖的关系。
1.3 SpringCloud 主要框架
服务发现:Netflix Eureka
服务调用:Netflix Feign(服务调用方式有两种,一种是 ribbon+restTemplate,另一种是feign)
熔断器:Netflix Hystrix
服务网关:Netflix Zuul
分布式配置:Spring Cloud Config
消息总线:Spring Cloud Bus
1.4 前期准备(开发环境,工具等)
IDEA 2017.3.1、 JDK1.8、数据库mysql 5.5.61、maven3.2.3、postman、RabbitMQ_Server
二、搭建父工程
点击File>new>project
填写GroupId 和ArtifacetId ,点击next按钮,最后点击Finish 完成创建。
因为本次的创建的为父工程,相当于一个壳,所以可以删掉src文件夹。
父工程创建完成后推荐大家优先修改项目的maven仓库地址,避免使用默认地址导致下载大量的jar包到C盘。
修改方法:File>Settings>弹出界面在搜索框输入maven
红圈位置就是默认的仓库地址,以后maven下载的包都会放到里面。
选择你自己的maven
勾选Override 选择自己的配置文件
继续勾选Override 选择或者新建一个包用来存储以后maven下载的包,最后点击OK,完事。
下面配置pom文件
packaging标签说明
项目的打包类型:pom、jar、war
packing默认是jar类型
<packaging>pom</packaging> ---------> 父类型都为pom类型
<packaging>jar</packaging> ---------> 内部调用或者是作服务使用
<packaging>war</packaging> ---------> 需要部署的项目
项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系。项目模块化可以将通用的部分抽离出来,方便重用;修改一部分代码不再是build整个项目,缩短了build时间;此外各模块都有自己的pom文件,结构更清晰。
使用maven进行模块划分管理,一般都会有一个父级项目,pom文件除了GAV(groupId, artifactId, version)是必须要配置的,另一个重要的属性就是packaging打包类型,所有的父级项目的packaging都为pom,packaging默认是jar类型,如果不作配置,maven会将该项目打成jar包。作为父级项目,还有一个重要的属性,那就是modules,通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build。
对于各个子项目,需要在其对应的pom文件开头申明对父级项目的引用,通过GAV实现。对于子项目自己的GAV配置,GV如果不配置,则会从父级项目的配置继承过来。子模块可通过dependencies标签来添加自己的依赖,此外子类项目的packaging值只能是war或者jar,前面已经说过,packaging默认是jar类型。如果是需要部署的项目,则需要打包成war类型,如果只是内部调用或者是作服务使用,则推荐打包成jar类型。
依次导入需要的依赖包后,父工程就算创建完成了。pom.xml配置如下:
<groupId>springcloud_demo_parent</groupId>
<artifactId>springcloud_demo_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!--SpringCloud最新稳定版本-->
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
<!--SpringCloud依赖版本管理-->
<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>