【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 复制代码
<?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)中增加响应的配置,并且在启动类里加上对于的注解,已启用相关功能。关于各功能模块的详细说明和使用情况,后续再继续更新

相关推荐
金色天际线-2 小时前
Nginx 优化与防盗链配置指南
java·后端·spring
知识分享小能手6 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾9 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT10 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa10 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落11 小时前
Python学习之装饰器
开发语言·python·学习
cyforkk11 小时前
Spring 异常处理器:从混乱到有序,优雅处理所有异常
java·后端·spring·mvc
Z_z在努力11 小时前
【杂类】Spring 自动装配原理
java·spring·mybatis
speop12 小时前
llm的一点学习笔记
笔记·学习