springboot登录架构图_从零开始写Spring Boot(1) - 为面试而写代码

一、 为什么写,要写什么?

半年前,从上一家做游戏的公司离职了。休息之后,准备开始转向互联网行业。

然而,项目经历不是很充足。所以,准备和朋友一起写一个简单的服务器。

目标只有一个,用到大部分热门的技术

之后,按这个目标大概聊了一下,基本制定了以下流程:

1)先从最简单的目标实现,用中间件比较多、比较成熟的技术。

2)代码放到github,文档信息使用腾讯文档进行同步,最终服务部署在一台阿里云服务器上。初步定下每天2小时投入。

3)初步选择了要使用的技术,基本是从工作需求选的,Java Spring Boot(工作多,开发块)、Docker、Redis、MongoDB、Kafka、K8S、Gradle(使用后,发现比较容易出一些小问题,后来换成了Maven)

4)第一阶段,以最简单的网站服务为目标实现,支持注册、登录,支持拉取内容。

写这个文章,一方面是为了理清思路,另外也是记录一下过程中遇到的问题,希望其他人可以避免。

二、 初步分工计划

目标制定之后,开始了初步分工(以下用A来代替我,B来代替另外那个朋友):

1)A一个简单的服务器架构图

2)B简单的需求文档,包含基本的客户端接口需求

3)一部分时间看下自己需要补充的技术知识

第一阶段学习目标如下:

A: Docker、Kafka、MongoDB

B: Spring Cloud相关,eureka、gateway、redis等常用中间件

三、 第一阶段目标

1. 服务器架构

架构图是用ProcessOn来画的。第一阶段的服务器架构很简单,只有最基本的功能:服务发现、网关、配置中心、缓存、数据库、以及其他功能服务。

3bf65bb8169796029c5775e1c4674fd5.png

2. 需求文档

第一阶段需求只有三个部分:主界面(包括一些文章分类、文章内容)、文章详情界面(文章详细内容)、用户登录注册界面

四、 开发过程

  1. 项目创建

开发工具选择Idea。目录结构选择了一个大的目录,下边分别创建新的Module作为服务器。

850c66b1f5f827896f2a6dca5479c710.png

项目使用Spring Initializr进行创建,可以相对方便的选择依赖。具体服务功能、依赖项如下:

1)Eureka:服务发现功能,用于其他服务器之间相互获取地址。

依赖项:spring-cloud-starter-netflix-eureka-server

2)Gateway: 网关功能,所以客户端请求的入口。第一阶段只负责服务转发功能,后续限流、安全相关功能也会在这个服务处理。

依赖项:spring-cloud-starter-gateway、spring-cloud-starter-netflix-eureka-client(除了Eureka之外的所有服务,都需要依赖这个组件来连接到Eureka服务上

3)User Server: 具体功能模块,在此只是做个示例。

依赖项:spring-cloud-starter-netflix-eureka-client、spring-boot-starter-web(用于Web应用的基本功能,包括REST常用内容)、lombok(本身没有具体功能,只是可以自动生成一些函数,例如getter、setter等,可以节约很多时间,代码也更简洁)

2. 开发过程以及遇到的问题

2.1 学习资源

Spring Boot的学习,其实官网就有给出学习案例,建议按照官网的内容,大概学习4-5个常用的模块,之后就基本对流程有了解了。推荐以下几个比较常用的:

  • https://spring.io/guides/gs/rest-service/
  • https://spring.io/projects/spring-cloud-gateway
  • https://spring.io/projects/spring-cloud-openfeign
  • https://spring.io/projects/spring-cloud-netflix(重点Eureka使用)
  • https://spring.io/projects/spring-data-redis(需要本地安装Redis)

2.2 一系列无法识别的问题

大部分问题,其实很简单:Maven下载过程太慢了,导致还没有识别到你的那些代码。

所以,建议操作流程如下:

  • 到Maven官网下载一个稳定版本的Maven,解压到本地。
  • 修改目录下confsettings.xml文件,找到Mirrors节点,加入阿里云的服务器地址。
    <mirror>
          <id>nexus-aliyun</id>
          <mirrorOf>*</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  • 在File->Settings->Build, Execution, Deployment->Build Tools->Maven界面,配置Maven home directory到你的软件目录。

1202e2d0efd4393442de6db25f65bab9.png

基本上,配置完成后大部分问题就已经解决了。

2.3 Eureka

项目结构如下:

d8d3d03a95684d207df888be99ddc8c7.png

Eureka服务相对内容简单,只需要在Application的类上加上注解@EnableEurekaServer就可以了

2508532a5faaaf98d48a9035af7a1b55.png

配置文件,初始版本是application.properties,个人更习惯yaml,所以重新创建了yaml文件。-dev和-pro可以区分开发环境和生产环境,具体在服务运行的Configuration中,Active Profiles填dev或者pro即可。

9097618c07f5ed03d0e06852a3391bec.png

配置内容包括几部分:

  • 服务名称:spring.application.name,所有服务都通过此方式命名,之后可以从eureka界面上看到服务名称,而不是IP:Port。
  • 服务端口:server.port,所有服务都需要制定,没有的话走默认端口,可能引起冲突。
  • 注册到Eureka服务地址:eureka.client.service-url是eureka服务的配置地址,eureka server需要配置是因为其实eureka server本身也是一个client。defaultZone是一般的默认地址。如果需要多个eureka server,互相讲地址写在这里就可以。

8ad84809f76e4d703c8508cb39ac792a.png

2.4 Gateway

项目结构与eureka一致,不再写了。

有一个可能出现的问题是:gateway和starter web可能会有冲突,导致启动的时候出现bean注册失败。删除starter web的依赖,重新导入下maven就可以了。

代码逻辑中,加入@EnableEurekaClient连接到eureka server(其他所有服务也一致,之后不再描述)。

8ec992f2d459d70a807e46d5048af17d.png

网关配置

路由配置:spring.cloud.routes,路由转发配置,id自定义,uri为想要转发到的服务地址。lb://xxx为xxx服务在eureka注册的地址。Predicates为规则匹配条件,filter为请求处理,StripPrefix是指请求上去掉几个/*/的部分。

最终这条转发的结果是:{gateway地址}/user/xx -> {ntech-user地址}/xx。

还有一些其他的转发选项可以用,例如匹配GET、POST方法,匹配cookie等,可以参考官方文档。

https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.2.RELEASE/reference/html/

3a3d33a4743fe85d3ca501992092fe0e.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值