【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一)
当前项目是用来记录下以前学习过的springcloud的dalston.sr1版本,该版本目前来看已经过时了,这里仅做下学习记录分享(当前推荐学习spring cloud alibaba)。
springcloud主要用于大型项目,比如有一个电商项目,可能涉及到商品模块、商家模块、订单模块、库存模块、购物车模块、用户管理模块、物流服务、登录模块等。如果全部创建在一个单体项目(单个进程),可能存在服务不稳定,不方便扩容扩展。这里就需要讲其拆分成多个模块,每个模块都是一个微服务(独立的进程)。其用到了springcloud的Eureka(服务注册与发现),Hystrix(服务熔断和降级),Ribbon(客户端负载均衡),zuul(网关与路由),Feign(服务接口http调用)
项目整体源代码已经上传至gitee上面,并已开源(地址为https://gitee.com/lichuangjava/springcloud-dalston-learn.git),如果需要可以自行clone到本地运行。
(一)项目整体结构和各模块的说明:
项目工程结构图如下:
其中springcloud2025为project,在该项目中再创建了多个module。各模块介绍如下:
(1)api 模块中主要是一些实体类,比如provider模块和consumer模块(分别是服务提供者和服务消费者项目)都会用到该实体,所以实体类放在了api 模块,另外consumer模块(服务消费者)需要用到的feign接口,也放在了api模块下。
(2)provider服务提供者模块,该项目为了演示集群,所以建了3个provider模块,分别使用8001、8002、8003端口,provider-hystrix是用于演示服务提供方的hystrix服务熔断效果
(3)consumer服务消费者模块,分别是consumer-80(使用restTemplate进行服务调用)、consumer-feign(使用feign进行服务接口的调用)、consumer-hystrix-dashboard(用于演示服务监控面板)
(4)spring cloud Eureka服务注册与发现模块:Eureka服务端,分别是eureka-7001、eureka-7002、eureka-7003,如下图,主要是为了演示eureka服务集群环境效果
(5)spring cloud config配置服务模块,主要是config-3344 (config服务端)、config-client-3355(config 客户端)、config-eureka-client-7001(config客户端,同时也是eureka服务端,用于演示eureka的服务端项目的application.yml配置信息,可以通过config服务获取到,并且能为eureka客户端提供服务注册功能)、config-goods-client-8001(config客户端,同时也是eureka客户端,用于演示eureka客户端项目的application.yml配置信息,可以通过config服务获取到,并且能正常注册服务到eureka服务端中)
(6)spring cloud zuul网关路由模块,主要是为项目提供服务的请求地址映射、路由功能
(7)spring cloud ribbon和feign服务负载均衡、服务接口调用
(8)spring cloud hystrix服务熔断与降级
服务熔断
服务降级 microservicecloud-consumer-feign和microservicecloud-api
(9)服务调用监控看板hystrix-dashboard
(二)项目在IDEA中的创建过程大致如下。
(1)首先在IDEA中创建了一个springcloud2025的项目,然后在该项目上再创建了多个module。
在IDEA中新建工程File - New Project ,在弹出框左侧选择Maven,然后项目JDK选择1.8版本,并点击下一步,然后填写项目名称springcloud2025,然后根据需要修改了GroupId,然后完成。如下图:
(2)在项目的POM文件中引入些依赖和jar版本配置。如下图:需要说明的是,第一次刚创建这个项目时,因为还没有新建任何module,所以图中是没有任何modules标签的,后面在该项目上再创建module时,会自动更新POM文件(不需要手工在该文件中填写module标签)
<?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.company</groupId><artifactId>springcloud2025</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>microservicecloud-api</module><module>microservicecloud-provider-8001</module><module>microservicecloud-consumer-80</module><module>microservicecloud-eureka-7001</module><module>microservicecloud-eureka-7002</module><module>microservicecloud-eureka-7003</module><module>microservicecloud-provider-8002</module><module>microservicecloud-provider-8003</module><module>microservicecloud-consumer-feign</module><module>microservicecloud-provider-hystrix-8001</module><module>microservicecloud-consumer-hystrix-dashboard</module><module>microservicecloud-zuul-gateway-9527</module><module>microservicecloud-config-3344</module><module>microservicecloud-config-client-3355</module><module>microservicecloud-config-eureka-client-7001</module><module>microservicecloud-config-goods-client-8001</module></modules><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 解决每次POM文件修改会自动将编译级别变成java5版本问题 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><java.version>8</java.version><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.9.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.6.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.31</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.0</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency></dependencies></dependencyManagement><build><finalName>microservicecloud</finalName><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><delimiters>$</delimiters><outputDirectory/></configuration></plugin></plugins></build></project>
(3)创建子模块
选中上面创建的springcloud2025项目,右键新建module,同样在左侧选中maven项目,SDK使用1.8.然后点击下一步,确认Parent项目是springcloud2025,然后输入module名称,比如microservicecloud-api,然后点击完成。(创建完成后,在springcloud2025项目的POM文件中,会自动维护子模块的相关信息
(4)后面再结合各模块的不同功能,在module中的POM引入相关的依赖,然后在application.yml(或者bootstrap.yml)中增加响应的配置,并且在启动类里加上对于的注解,已启用相关功能。关于各功能模块的详细说明和使用情况,后续再继续更新