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文件里面添加如下代码:
pom
关于maven的知识,如果不了解的可以私下自己补充一下这方面的知识,这里就不详细赘述了。
3.2 注册中心创建
在3.1创建的根文件上,右键创建module项目,如下图:
然后和3.1步骤一样,下一步到项目依赖的页,我们对注册中心依赖进行添加,如下图:
点击下一步完成注册中心的创建,注册中心创建之后,我这里将pom文件里面springBoot的版本做了修改,代码如下:
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
com.blog
register
0.0.1-SNAPSHOT
register
注册中心
1.8
Edgware.SR2
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-security
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
SpringBoot的版本使用
SpringBoot和SpringCloud的版本如何对应?
首先我们进入spring的官网,点击projects,如下:
然后找到SpringCloud,如下:
进去之后,一直往下拉,如下图:
使用的时候,按照上图这种对应关系,将使用到的组件和SpringCloud对应。SpringCloud的命名是根据伦敦地铁站的名字命名的。
3.3 配置中心
创建配置中心模块构建和注册中心一样,只是在选择模块依赖的时候,需要依赖eureka客户端,如下图:
配置中心服务要添加下面两个依赖:
(a) 注册服务发现依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
(b) config配置服务依赖
org.springframework.cloud
spring-cloud-config-server
3.4 网关服务
创建过程和之前两个一样,这里直接跳到依赖添加界面,如下图:
对添加的依赖这里暂时不做详细介绍,在实际开发使用的时候会做详细说明,这里只对下面服务注册相关的一个依赖做出说明,如下:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
eureka-client这个依赖和注册中心的eureka-server对应,也分服务端和客户端,eureka-client负责将服务注册到注册中心。
项目的几个核心创建就介绍到这里,其他的服务模块是common、blog_interface这两个,创建方式和上面的一样,对于添加的依赖这里做出统一的整理,如果想直接使用可以使用下面的pom文件替换你的pom文件。
(1) 网关pom文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
com.blog
gateway
0.0.1-SNAPSHOT
gateway
网关
1.8
Edgware.SR2
org.springframework.cloud
spring-cloud-starter-gateway
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
(2) 配置中心pom文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
com.blog
config
0.0.1-SNAPSHOT
config
配置中心
1.8
Edgware.SR2
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-config-server
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
(3) common公共服务pom文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
com.blog
common
0.0.1-SNAPSHOT
common
公共方法实现
1.8
org.springframework.boot
spring-boot-starter
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
(4) 接口服务pom文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE
com.blog
blog_interface
0.0.1-SNAPSHOT
blog_interface
博客接口项目
1.8
Edgware.SR2
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-config-client
org.springframework.boot
spring-boot-starter-data-jpa
org.projectlombok
lombok
mysql
mysql-connector-java
com.alibaba
fastjson
1.2.24
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
上面的依赖配置信息,在后面的开发过程中会添加其他的依赖,具体可以在GitHub上实时推送,想看的小伙伴可以直接移步git。如果有问题可以在留言区直接提出问题,我会定时做出解答,也可以在git上面的issue上面写出自己遇到的问题,在版本迭代的过程中,会解决遇到的bug并在公众号的每一期上面做出详细的解答。
4. 项目启动
构建了这么久,现在是时候启动微服务项目了,在你的idea中,对每一个模块都进行启动,注意先启动注册中心,如图:
这里根据自己的命名选择相应的服务进行启动,启动之后在浏览器里面访问,注册中心的默认端口是8761,你也可以自己设置,如下图:
上图就是项目启动之后的信息,图中画出来的部分
,看字面意思都能知道是当前被注册到eureka里面的应用。
5. 补充:
下面找两个模块的yml配置文件做一点说明,yml格式和properties格式都可以,先对eureka的说明:
eureka注册中心yml文件配置信息
spring:
application:
name: register
security:
user:
name: weiqi
password: weiqi123456
server:
port: 8761
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://weiqi:weiqi123456@localhost:8761/eureka
register-with-eureka: false
fetch-registry: false
上面配置需要注意的是第一个security的信息,这里是对需要注册到注册中心的服务进行安全校验,需要账号密码才能注册;defaultZone信息是注册到注册中心的地址信息,在后面每一个服务里面都需要添加,当然在实际使用中,这些都是需要放到git、svn等上面,通过config去拉取的。
接口yml文件配置信息
spring:
application:
name: blog_interface
cloud:
config:
server:
git:
uri: https://gitee.com/blog/config-repository
username: [email protected]
password: *********
basedir: /opt/config-basedir
datasource:
driver-class-name: com.mysql.jdbc.Driver
#test database address & username & password
username: weiqi
password: ******
url: jdbc:mysql://ip地址:3306/blog_cloud?characterEncoding=utf-8&useSSL=false
server:
port: 8080
eureka:
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,不要拒绝英文文档,坚持看下去对自己的编程功底有很大的帮助。
获取实时信息,关注公众号:『编程之艺术』,二维码: