1. SpringCloud简介

我们先看看springCloud官网(https://spring.io/projects/spring-cloud#overview)上的介绍:

Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.

大概意思就是SpringCloud为开发者提供了构建分布式系统的基础工具,也就是说让你自己实现一个分布式系统是很难的,也很耗时间的,所以SpringCloud这个东东给我们提供了快速构建这种模式的工具。

相信开发人员都有体会,SpringCloud现在是非常流行的一个分布式微服务框架,而且现在好多公司也采用了这个框架做自己的微服务,有的公司已经实用这个框架对自己原有的项目做了系统重构。

在这次的个人博客项目中,遇到比较难懂的组件,我会从源码进行分析,每一步遇到的比较有难度的bug,会写出解决的具体方案。项目的所有源码都会上传到全球最大的同性交友平台GitHub上,如果有需要的小伙伴可以clone到自己的本地仓库。现在我们就是用SpringCloud来开发一个自己的个人博客项目,下面进入主题。

2. 项目架构

个人博客项目,我这里使用的组件全部是SpringCloud的,对于有些组件在使用过程中遇到的版本兼容问题,遇到我们解决,下面给出项目的架构图如下图:

上面图片给出了项目的整体架构图,当然现在的架构不是最终的,在实际开发过程中,我们慢慢迭代出一个好的架构出来,所谓:好的架构都是一步一步迭代出来的。

3. 项目搭建

下面开始项目的实际搭建工作,开发环境使用idea,使用eclipse的小伙伴,我这里强烈建议换到idea的队伍中。废话不多说,我们开始项目的搭建工作。

3.1 根项目搭建

在idea中新建项目,搭建项目的root,如下图。

这里下一步下一步就可以了,注意命名规则就行,这个如果不懂自己网上找资料,这方面的文章现在网上很多,创建完项目之后,如下图,对自己的项目做一个简单的整理。

删除上面红色标注的文件,然后打开pom文件,这里需要对pom文件做一些修改,如下图:

pom文件里面添加如下代码:

<packaging>pom</packaging>

关于maven的知识,如果不了解的可以私下自己补充一下这方面的知识,这里就不详细赘述了。

3.2 注册中心创建

在3.1创建的根文件上,右键创建module项目,如下图:

然后和3.1步骤一样,下一步到项目依赖的页,我们对注册中心依赖进行添加,如下图:

点击下一步完成注册中心的创建,注册中心创建之后,我这里将pom文件里面springBoot的版本做了修改,代码如下:


<?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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.blog</groupId><artifactId>register</artifactId><version>0.0.1-SNAPSHOT</version><name>register</name><description>注册中心</description><properties><java.version>1.8</java.version><spring-cloud.version>Edgware.SR2</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-security</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>

SpringBoot的版本使用<version>1.5.10.RELEASE</version>,SpringCloud的版本使用Edgware.SR2,这里一定要注意,SpringBoot和SpringCloud的版本一定要对应,不然项目就会出问题。这里着重对eureka-server依赖说一下,这依赖就是注册中心服务端依赖,通过心跳机制监听注册到服务中心的客户端是不是存活。

SpringBoot和SpringCloud的版本如何对应?

首先我们进入spring的官网,点击projects,如下:

然后找到SpringCloud,如下:

进去之后,一直往下拉,如下图:

使用的时候,按照上图这种对应关系,将使用到的组件和SpringCloud对应。SpringCloud的命名是根据伦敦地铁站的名字命名的。

3.3 配置中心

创建配置中心模块构建和注册中心一样,只是在选择模块依赖的时候,需要依赖eureka客户端,如下图:

配置中心服务要添加下面两个依赖:

(a) 注册服务发现依赖


<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

(b) config配置服务依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency>

3.4 网关服务

创建过程和之前两个一样,这里直接跳到依赖添加界面,如下图:

对添加的依赖这里暂时不做详细介绍,在实际开发使用的时候会做详细说明,这里只对下面服务注册相关的一个依赖做出说明,如下:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

eureka-client这个依赖和注册中心的eureka-server对应,也分服务端和客户端,eureka-client负责将服务注册到注册中心。

项目的几个核心创建就介绍到这里,其他的服务模块是common、blog_interface这两个,创建方式和上面的一样,对于添加的依赖这里做出统一的整理,如果想直接使用可以使用下面的pom文件替换你的pom文件。

(1) 网关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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.blog</groupId><artifactId>gateway</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway</name><description>网关</description><properties><java.version>1.8</java.version><spring-cloud.version>Edgware.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</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>

(2) 配置中心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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.blog</groupId><artifactId>config</artifactId><version>0.0.1-SNAPSHOT</version><name>config</name><description>配置中心</description><properties><java.version>1.8</java.version><spring-cloud.version>Edgware.SR2</spring-cloud.version></properties><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-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></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>

(3) common公共服务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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.blog</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version><name>common</name><description>公共方法实现</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

(4) 接口服务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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.blog</groupId><artifactId>blog_interface</artifactId><version>0.0.1-SNAPSHOT</version><name>blog_interface</name><description>博客接口项目</description><properties><java.version>1.8</java.version><spring-cloud.version>Edgware.SR2</spring-cloud.version></properties><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-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version></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>

上面的依赖配置信息,在后面的开发过程中会添加其他的依赖,具体可以在GitHub上实时推送,想看的小伙伴可以直接移步git。如果有问题可以在留言区直接提出问题,我会定时做出解答,也可以在git上面的issue上面写出自己遇到的问题,在版本迭代的过程中,会解决遇到的bug并在公众号的每一期上面做出详细的解答。

4. 项目启动

构建了这么久,现在是时候启动微服务项目了,在你的idea中,对每一个模块都进行启动,注意先启动注册中心,如图:

这里根据自己的命名选择相应的服务进行启动,启动之后在浏览器里面访问,注册中心的默认端口是8761,你也可以自己设置,如下图:

上图就是项目启动之后的信息,图中画出来的部分

Instances currently registered with Eureka

,看字面意思都能知道是当前被注册到eureka里面的应用。

5. 补充:

下面找两个模块的yml配置文件做一点说明,yml格式和properties格式都可以,先对eureka的说明:

eureka注册中心yml文件配置信息

spring:application:name: register
security:user:name: weiqipassword: weiqi123456
server:port: 8761
eureka:instance:prefer-ip-address: trueclient:service-url:defaultZone: http://weiqi:weiqi123456@localhost:8761/eurekaregister-with-eureka: falsefetch-registry: false

上面配置需要注意的是第一个security的信息,这里是对需要注册到注册中心的服务进行安全校验,需要账号密码才能注册;defaultZone信息是注册到注册中心的地址信息,在后面每一个服务里面都需要添加,当然在实际使用中,这些都是需要放到git、svn等上面,通过config去拉取的。

接口yml文件配置信息


spring:application:name: blog_interfacecloud:config:server:git:uri: https://gitee.com/blog/config-repositoryusername: winqi1127@vip.qq.compassword: *********basedir: /opt/config-basedirdatasource:driver-class-name: com.mysql.jdbc.Driver#test database address & username & passwordusername: weiqipassword: ******url: jdbc:mysql://ip地址:3306/blog_cloud?characterEncoding=utf-8&useSSL=falseserver:port: 8080eureka:client:service-url:defaultZone: http://weiqi:weiqi123456@localhost:8761/eureka

上面配置第一个是拉取配置文件的信息config-->server-->git,因为我使用的是git,所以需要填写想要拉取配置文件的服务器地址、账号、密码、存放位置信息;

第二个配置信息是datasource,个人博客项目使用的是MySQL数据库,这里的配置信息和大家之前使用SSM开发后端项目时的一样,不做多余解释。

第三个就是和上一个一样的,需要注册到哪一个注册中心的一些注册信息,如下:

eureka:client:service-url:defaultZone: http://weiqi:weiqi123456@localhost:8761/eurek

对于yml文件的介绍就到这里,具体的使用在后面实际开发中遇到那个,我们介绍那个。

6. 小建议

编程的一个小建议,遇到自己随手解决不了的bug,如果网上找不到满意的答案,记得一定去官方api查看相关的说明,对于SpringCloud,可以看下图:

可以看到对每一个组件的说明都特别详细,示例代码都会给出,所以建议有时间的可以多看看官方api,不要拒绝英文文档,坚持看下去对自己的编程功底有很大的帮助。

获取实时信息,关注公众号:『编程之艺术』,二维码:

SpringCloud开发个人博客项目(框架搭建)相关推荐

  1. Spring Boot + vue-element 开发个人博客项目实战教程(四、数据库搭建和配置)

    前言 java项目已经创建好了,接下来我们要准备数据库了,数据库是干嘛的相信大家都知道了,我在这就不说了,我们需要做的就是在电脑上安装mysql数据库. 附菜鸟教程的MySQL基础学习教程:https ...

  2. Spring Boot + vue-element 开发个人博客项目实战教程(一、项目介绍和规划)

    ⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot + vue-element 开发个人博客项目实战教程 ⭐专栏内容:零基础学Java.个人博客系统 ⭐我的文档网站:http://xyhwh- ...

  3. Spring Boot + vue-element 开发个人博客项目实战教程(二十五、项目完善及扩展(前端部分))

    ⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot + vue-element 开发个人博客项目实战教程 ⭐专栏内容:零基础学Java.个人博客系统 ⭐我的文档网站:http://xyhwh- ...

  4. Spring Boot + vue-element 开发个人博客项目实战教程(十三、文章标签功能实现)

    ⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot + vue-element 开发个人博客项目实战教程 ⭐专栏内容:零基础学Java.个人博客系统 项目部署视频 https://www.bi ...

  5. 利用django+pycharm开发小型博客项目!!!

    废话不多说,让我王虎剩大将军带领大家利用djang框架开发一个小型的博客项目吧!! 首先,此教程适合的人群为,懂得创建python的虚拟环境,以及拥有少数web前端开发的经验,并且拥有少数的后端编程经 ...

  6. Python Flask框架-开发简单博客-项目布局、应用设置

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,只在于他所拥有的.所以可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网 ...

  7. [Vue 牛刀小试]:第十六章 - 针对传统后端开发人员的前端项目框架搭建

    一.前言 在之前学习 Vue 基础知识点的文章中,我们还是采用传统的方式,通过在 html 页面上引用 vue.js 这个文件,从而将 Vue 引入到我们的项目开发中.伴随着 Node.js 的出现, ...

  8. Python Flask框架-开发简单博客-认证蓝图

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  9. 最新后盾网Laravel框架重入门到实战 Laravel博客项目实战 陈华主讲 包含课件源码

    老师介绍 陈华,PHP明星讲师,大学生演讲网创始人,2010年开始开发整站项目,精通Laravel,Yii框架. 简 介 本套课程是一套以项目实战为主的Laravel5.2实战开发教程,是真正意义上的 ...

最新文章

  1. 我在中关村给不了你国贸的爱
  2. 脑-脑接口:人类大脑利用意念控制老鼠走迷宫
  3. SQLite简易入门
  4. Linux echo命令和查看环境变量实例
  5. c语言数码管连续加一,各位大神,如何用C语言实现在数码管上实现1234同时亮
  6. 《软件工程》课程设计总结
  7. Python解惑:整数比较
  8. php实例之简单的留言板,PHP实例一之简单的留言板
  9. 光动能表怎么维护_西铁城手表推荐,西铁城光动能表推荐选购指南
  10. BlueCat 批量网站查询工具,全网最快的查询工具!!
  11. networkx中求解平均度_CFD理论|Reynolds平均法(RANS)
  12. python匿名函数_Python匿名函数
  13. c语言编写克莱姆法则,求克莱姆法则解方程组的c语言代码,能正确运行的
  14. Java 操作Word书签(三):用文本、图片、表格替换书签
  15. 测试打印机性能的软件,打印速度测试
  16. html js手册chm,W3C Javascript CHM参考手册离线版
  17. C盘里的HTML是什么文件,C盘Windows下的winsxs是什么文件可以删除吗
  18. php 汉王云名片_汉王云名片识别(SM)组件开发详解
  19. 用于图像降噪的卷积自编码器
  20. MuJoCo及mujoco_py安装(以及troubleshooting)

热门文章

  1. 常见的编程语言有哪些?
  2. 【竞赛】视频质量评价竞赛经验记录-2(调研和尝试)
  3. Flink环境搭建(standalone模式)
  4. Drbd脑裂StandAlone解决办法
  5. 视觉大模型调研(Survey of Visual Foundation Model)
  6. 基于C#的校园闲置物品共享系统的开发和实现(Asp.net+Web)
  7. 当windows10访问windows7的共享出来的文件夹或者打印机时,显示windows无法访问\\******错误代码:0x80070035
  8. HFSS画图中的sweep功能
  9. 正则学习小记----1
  10. 揭开IL代码的神秘面纱--进阶篇(一)