当前位置: 首页 > ai >正文

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

http://www.xdnf.cn/news/5790.html

相关文章:

  • WebGIS 开发黑科技:解锁地理信息的新视界
  • 大模型常用位置编码方式
  • 信息论14:从互信息到信息瓶颈——解锁数据压缩与特征提取的秘密
  • 分析Docker容器Jvm 堆栈GC信息
  • 【简单易懂】SSE 和 WebSocket(Java版)
  • 删除购物车中一个商品
  • Unity
  • KMDA-6920成功助力印度智慧钢厂SCADA系统,打造高效可靠的生产监控平台
  • 菜狗的脚步学习
  • 【android bluetooth 框架分析 02】【Module详解 7】【VendorSpecificEventManager 模块介绍】
  • 前端开发避坑指南:React 代理配置常见问题与解决方案
  • BFS算法篇——打开智慧之门,BFS算法在拓扑排序中的诗意探索(上)
  • 机器学习——聚类算法练习题
  • [Java实战]Spring Boot 3构建 RESTful 风格服务(二十)
  • java使用 FreeMarker 模板生成包含图片的 `.doc` 文件
  • RustDesk:开源电脑远程控制软件
  • 端侧智能重构智能监控新路径 | 2025 高通边缘智能创新应用大赛第三场公开课来袭!
  • 霍夫圆变换全面解析(OpenCV)
  • 6. 多列布局/用户界面 - 杂志风格文章布局
  • 手机换IP真的有用吗?可以干什么?
  • spark-local模式
  • WM_TIMER定时器消息优先级低,可能会被系统丢弃,导致定时任务无法正常执行
  • T-BOX硬件方案深度解析:STM32与SD NAND Flash存储的完美搭配
  • Linux中find命令用法核心要点提炼
  • spark-standalone
  • http断点续传
  • Games101作业四
  • 在Ubuntu服务器上部署Label Studio
  • 从SAM看交互式分割与可提示分割的区别与联系:Interactive Segmentation Promptable Segmentation
  • Java基础(IO)