商城项目解析(如何搭建微服务框架和建网关模块,注册中心Eureka模块和item模块)

本项目是从网上找到的乐优商城项目,本文以这个项目为例做分析,有兴趣的可以看看。

首先是搭建项目
在这里插入图片描述
这里为什么选择maven而不选择Spring Initializr呢,因为选择Spring Initializr的话,它会生成一些其他的配置,如果我们构建一个很大的项目,但是生成了其他的配置,可能会对项目的影响很大,到时候修改起来没有这么方便,因此我们还是选择Maven项目,因为在这里选择项目类型什么的只是会给你增加配置,其实你进入后自己从pom包里面去删除配置或者增加配置都是可以的。

记得选择jdk后,其他的archetype不用选,直接点击next

然后进入项目,导入相对应的jar包,因为我们这个是SpringBoot框架下的微服务Springcloud搭建的一个项目,所以去导入相对应的配置即可。
在这里插入图片描述
这是Springcloud的jar包配置,因为我们采用的是微服务Springcloud所以我们需要这个jar
在这里插入图片描述
这个是Springcloud的版本,也是要注意,其他的jar包版本号是不一样的,Springcloud的版本号是字母,比较特殊。

还有mybatis启动器,为什么要配置这个mybatis启动器呢,因为我们需要连接数据库,就需要mybatis启动器来帮助我们去连接数据库

在这里插入图片描述
这里可以看到还有三个包,分别是通用的Mapper启动器包,分页助手包,mysql驱动包,后面两个包没什么好解释的,就是Mapper启动器包是什么,Mapper启动器包就是你配置后可以使用Mapper方法,通过什么样的方式去使用呢?答案就是继承,你可以用一个接口去继承Mapper方法,然后封装这个接口并且调用这个接口的方法,就可以实现间接调用了Mapper方法,一般来说,Mapper里面有可以操作数据库的方法,比如通过ID查找对应ID的人的全部相关信息,都是可以同过Mapper去查找的。

在这里插入图片描述
注意导入这个客户端,FastDFS大概就就是一个追踪服务器,可以对进程进行追踪

然后我们就要开始创建模块了,我们要先创建一个什么样的模块,该怎么去构思呢?

很多小白不知道该创建哪些模块,拿到项目后就无从下手了,你要清楚,首先你要创建模块,你得先了解你要做的是一个什么项目,有什么需求,你才能去创建模块,对吧?

因此,我们这个商城是一个电商平台类的项目,是需要客户端发送请求到注册中心然后做负载均衡到服务端的一个项目,因此,我们需要搭建的模块肯定有Eureka,还有网关,Eureka就是注册中心,你如果没有注册中心你是没办法调用服务的,同样,你没有网关的话如何去拦截别人没有意义的请求,怎么保护你的服务器,因此,我们可以创建注册中心Eureka和网关配置。

先创建Eureka,新建模块,选择maven,jdk1.8,创建Eureka注册中心模块Registry,然后导入Eureka的jar包

在这里插入图片描述

为什么我们要在这里搭建Eureka的服务端jar包呢,因为在这个项目当中我们都是服务端,别人客户端是从外面进行访问我们的项目,所以我们这里就先用服务端来进行配置Eureka

然后,我们就在这个新创建好的模块Registry中去配置yml
在这里插入图片描述

从上到下依次配置的是端口号 10086,微服务名leyou-registry
Eureka地址,也就是注册中心的地址,访问这个地址就可以直接访问Eureka,查看注册中心的情况,如果有客户端进行访问,Eureka上面都会有显示,还有个问题就是为什么这里配置的是client为什么不是server呢,因为一般都是客户端访问这个注册中心,注册中心再通过服务端的注册情况随机分配给服务端进行服务。
还有关闭服务器的自我保护,如果不关闭服务器的自我保护,那这个服务器就访问不了了,所有请求将会被熔断而且服务降级
还有下面的就是定期清理无效连接,后面的是时间,每隔多少毫秒清理一次。

然后我们需要建一个引导类,要注意的是,这个引导类要建在外层包里面,才会生效

在这里插入图片描述
添加两个注解,一个是标明是SpringBootApplication,也就是SpringBoot的程序,另一个则是标识自己是一个注册中心。

然后写上方法
在这里插入图片描述
加一个main方法后,写上SpringApplication去运行什么,引导类都是写运行自己的这个类,这段话的意思也就是让SpringBoot程序去运行这个引导类的意思。

启动一下,并且访问
在这里插入图片描述
我们直接访问localhost:10086就可以访问到注册中心了,有些人可能会问,我上面yml配置里面的
defaultZone里面配置的地址不是多了个Eureka吗,怎么直接访问10086就可以访问到注册中心了,因为我们启动了引导类,而且端口号就是10086,也就是说,你如果直接访问10086,就可以直接访问这个注册中心模块,不需要去管地址后面的Eureka。

然而有个地方需要去处理一下,因为我们这个就是Eureka注册中心,我们只需要显示服务端或者客户端的连接就可以了,我们是不需要显示自己出来,并且更加不用替我们自己去拉微服务,所以我们需要隐藏自己
在这里插入图片描述
如上图所示,这个是需要隐藏的,因此我们需要配置上这两个在这里插入图片描述
第一个是隐藏Eureka的显示,第二个是关闭拉取微服务。

然后接下来就是搭建一个网关
在这里插入图片描述
取名为gateway

然后我们需要引入的依赖有
在这里插入图片描述
为什么在这里引入的就是eureka的客户端配置了呢?首先我们要知道,网关的作用就是接收客户端的请求,并且审核,验证,然后再决定要不要传给Eureka,所以是需要配置Eureka的相关配置,后面的这个client就是因为网关面对的就是客户群体,所以需要配置Eureka的客户端配置。

整个流程如下所示

在这里插入图片描述

客户发送请求过来网关这边,然后由网关进行审核后再把请求信息发送给微服务。微服务再进行负载均衡。
在这里插入图片描述

除此之外,我们还需要引入网关的配置。

新建一个file文件,以yml为后缀的application文件

在这里插入图片描述

从上往下依次是端口号,10010,微服务名字,eureka:client(为什么要配置这个呢,client是固定写法)然后还有defaultZone,微服务的地址,要注意的是,eureka地址要和Registry模块中的eureka注册中心配置的yml地址要一样,因为这样就可以去访问到Registry模块中的注册中心,并且把自己的服务添加进去,让注册中心进行一个调配,然后下面就是设置拉取服务的间隔时间,因为我们的网关在注册中心进行注册,有请求来的时候需要在注册中心进行拉取服务,我们可以设置拉取服务的间隔时间,那个5就是间隔时间

下面就是网关的前缀,我们还有微服务名没有配置,因为我们还没编写微服务,所以还没配置,因此先写了网关的前缀。

然后我们再去新建一个引导类:

首先一个小插曲,我们在新建springcloud一个服务功能组件的时候,还是按照三步走:
1.配置启动类
2.覆盖配置
3.添加引导类

你可以去看看上面的步骤,基本上都是按照这三步走的,然后我们来配置网关模块的引导类

在这里插入图片描述
复习一下这三个注解是什么意思,第一个是声明这个程序加入到SpringBoot运行程序里面
第二个是之前网关的那个博客也提到过,也就是说你的网关是在Eureka里面进行注册的,然后客户发送请求过来,你需要在注册中心去拉取网关服务,所以配置上这个就可以接收用户发来的拉取服务的请求,最后一个是网关的配置,只要是网关都需要加上这个组件配置。

老样子,用SpringApplication启动自己
在这里插入图片描述
启动服务后就可以看到启动成功了
在这里插入图片描述
这里可能需要等一等,需要响应时间,如果遇到启动不成功的情况,查看一下自己有没有刷新导入jar和重启服务器。

我们可以对比一下Eureka注册中心的引导类注释和网关的引导类注释有什么不一样
在这里插入图片描述
在这里插入图片描述
两者的共同点就是引入了SpringBootApplication注解,因为他们都需要SpringBoot去运行自己的程序。

不同之处在于,Eureka注册中心引入的是EnableEurekaServer,这个是配置Eureka组件注释

而网关的话,除了配置网关注释以外,还要配置在注册中心拉取服务的注释。

配置注释的共同点:1.SpringBootApplication肯定会配置。2.各个模块自己的功能比如注册功能或者网关功能也一定会配对应功能的注释。

我们可以看看这个商品的微服务搭建是怎么搭建的:
在这里插入图片描述

比如我们搭建商品的微服务,大概该怎么搭建呢?还是需要GetMapping来获取前端传过来的数据类型,然后用获取到的数据类型比如id去进行相对应的功能编写比如通过id查找商品信息

那我们这里还有其他的微服务的比如用户订单管理服务,我们需要在这个服务里面去调用商品模块的微服务,我们重写了方法,但是需要重新封装商品微服务的方法,然后进行调用,但是我们的微服务可不止这一个,还有很多微服务要调用商品的微服务,那如果每一个微服务都去选择封装商品模块的方法,那我们这个代码量不是变多了吗?对吧?所以我们需要简化代码,不能造成代码的冗余。

所以为了解决这一个问题,我们可以把商品的pojo独立创建一个工程,然后打包成jar包,然后发送到私服上去,让每个微服务都只要在pom文件里面配置了就可以进行使用。

然后我们怎样把上述方法实现一下呢?

首先我们需要建立一个聚合模块,这个就是pojo的模块,但是我们要注意,这个模块是要被其他微服务进行调用的,所以我们需要做一个打包处理:

在这里插入图片描述
这里就是打包成pom,可以让其他微服务通过写入pom来直接调用这个pojo

然后这个聚合模块需要两个模块,一个是微服务模块,一个是商品的pojo模块,具体为什么需要这两个模块呢?一会再告诉你们。

先新建pojo相关的模块
在这里插入图片描述
为什么我们新建这个模块却不叫pojo呢?因为这个模块不止是放pojo的,而且以后还会有异常,需要在这个模块进行编写异常,所以先起名字为interface。

然后我们的interface模块暂时是不需要引入什么依赖的,看以后各个服务需要什么依赖,再根据情况去引入就可以。

然后我们要创建我们的微服务模块在这里插入图片描述
这里说明一下,创建模块统一都是Maven,而且JDK为1.8。

创建完这个微服务后,我们需要去配置对应的pom

聚合模块的微服务模块需要配置什么依赖呢?

在这里插入图片描述
首先,我们肯定需要Eureka的依赖,因为是个微服务,凡是微服务就肯定是需要注册中心的,其次,我们配置的是client客户端的注册服务,为什么不是配置服务端的注册服务呢?因为配置了这个客户端的注册服务,才可以去接收客户发过来的请求,并且做服务的负载均衡,因为这个是类似于一个实体类pojo的微服务,我们如果有哪个微服务需要调用这个pojo类,相当于这些微服务作为用户给这个pojo的微服务发送请求,然后pojo微服务接受请求并且做负载均衡,所以这里需要配置的是Eureka的client,还有一个需要配置的就是starter-web,也就是web启动类,因为我们访问pojo模块都是要通过网址进行访问的,如果没有配置web启动模块,就没办法访问到网址了,所以我们需要配置启动web依赖。

然后我们这个模块主要实现的功能就是对数据库的增删改查,只要别人想查看商品的数据库信息或者对数据库的商品进行进行更改,都会来访问这个微服务,因此,我们还需要这个依赖:

在这里插入图片描述
这些都是和数据库操作相关的依赖,第一个是jdbc连接器,用来连接数据库,第二个是mysql连接器,配置上这个数据库连接器之后你才能去连接数据库,这里用的数据库是mysql类型的数据库,所以你需要去配上mysql类型的数据连接方式,最后一个是mybatis启动器,这个mybatis启动器是spring-boot专用的mybatis启动器,配置上这个依赖以后,你就可以用mybatis去连接数据库。

而且操作数据库不能没有mapper,因为mapper是实现操作数据库的一个类,包括数据库的增删改查其实都是调用到mapper里面的方法

在这里插入图片描述

分页插件需要导入这个就不多解释了,然后还需要导入我们做好的接口,也就是pojo模块,因为我们就是它的微服务,谁想要调用这个pojo就是要访问我们的这个微服务。

还有下面这个依赖也是需要引入进来的,因为我们做这个微服务是需要测试一下自己的接口能不能用,也就是测试这个微服务能不能启动,然后被其他微服务进行调用。

在这里插入图片描述
然后我们需要配置微服务的yml
在这里插入图片描述
凡是配置微服务的yml,无论配置什么,有2个是肯定要写的:
1.端口号
2.eureka注册服务地址

这两个是肯定要写的,其余的就像数据库(因为这里是实体类的微服务,也就是操作数据库的微服务,那配置数据库是肯定的),还有eureka心跳,mybatis扫描包,这些是需要的时候才写,因为我们这里配置了interface依赖,所以可以直接扫描interface里面的mybatis的jar包。

接下来我们需要配置item微服务的引导类了

在这里插入图片描述
继续解释一下这个注解,这个注解的意思就是说你这个微服务需要在注册中心里面接收用户请求,所以你需要这个注解来帮助你接收用户发来的请求,然后在eureka里面拉取相对应的服务。
微服务的引导类这两个注解是不能少的

接下来我们需要在网关处配置上路由:
在这里插入图片描述
在这里插入图片描述
因为我们item微服务的名字为item-service,所以直接在网关里面去配置routes是item-service就可以了,然后后面接上对应的url,也就是你在网址上输入这个url就可以通过网关来访问我这个item微服务。

好了我们该配置的基本已经配置好了,接下来我们要进行一下测试

以前我们都是写一个controller方法提供地址来进行方法访问,现在为了快捷,我们可以不用写controller方法先,我们可以用测试接口的办法去测试

在这里插入图片描述
往item微服务去添加这个依赖,这个依赖的作用就是当你运行网关和item微服务的服务器后,你再去点击这里
在这里插入图片描述
就会返回一个jason对象,说明接口测试成功了,这就是这个依赖的功能,好了 这也是说明了我已经测试接口测试成功了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值