1、Comment-Service

评论服务,商品的评论功能(不需要⼤家开发,这个版本不需要⼤家开发商品评论功能)

  • Comment-api

放置的是接⼝类 以及⼀些常量类,还有⼀个是DTO,不需要启动

  • Comment-provider
    商品评论服务的服务提供者, 主要作⽤是向外暴露服务,连接数据库,没有Controller
    bootstrap启动类、Comment-api中接口的实现类、还有一些converter、DTO、entity、Utils等。

一般情况下将Mapper文件放在resource目录下,现在将Mapper.xml也放在了src目录下,是因为pom文件中增加了以下的配置:

微服务项目接口定义 微服务 项目结构_微服务项目接口定义

2、Gateway

⽹关项⽬,作为整个后端程序的⼊⼝,需要单独启动
⽹关⾥⾯的主要放置的⽂件是:拦截器(拦截请求)、Controller⽂件,去调⽤Service的时候⾛Dubbo远程调⽤ 、bootStrap启动类、接收数据(@Requestbody)用的一些bean。

Resource目录:
application.yml:

spring:
  application:
    name: gateway
  profiles:
    active: dev  # 表示当时生效的环境是dev,这样的话就会加载application-dev.yml中的配置
server:
  port: 8080

application-dev.yml:

dubbo:
  application:
    name: gateway
    owner: ciggar
  registry:
    address: zookeeper://127.0.0.1:2181
    check: true
    group: dubbo-dev
    simplified: true
  metadata-report:  # 元数据中心
    address: zookeeper://127.0.0.1:2181
    retry-times: 30
    cycle-report: false
    group: dubbo-dev
  scan:
    base-packages: com.cskaoyan.gateway
captchaFlag : false

3、mall-commons

有以下四个module,这四个module都是不需要启动的,作为Jar包给别的项⽬提供依赖的。

至于如何导成jar包:

微服务项目接口定义 微服务 项目结构_微服务项目接口定义_02


然后在commons-core目录的target目录下就会有commons-core的jar包。

clean干掉jar包、package打包文件到target目录、install把jar包放到本地的maven仓库。

install完会在本地仓库中出现:

微服务项目接口定义 微服务 项目结构_服务提供者_03

  • commons-core
    放置了⼀些接⼝需要⽤到的类,不需要单独启动
    为了规范代码,所有的Response都需要继承AbstractResponse,所有的Request都要继承AbstractRequest,AbstractRequest有一个抽象方法requestCheck可以检查request的请求参数是否合法。
  • Commons-lock
    和分布式锁相关的内容(暂时不需要⼤家去关注)
    synchronized是基于jvm的,可以保证在一个服务中只有一个线程在执行某段代码,而分布式的话,假如有三个服务,就锁不住了。
    这时你用jvm自带的锁就锁不住了,就需要跨jvm的锁。例如可以让zookeeper、或者redis、或者mysql(三个服务器都执行插入数据的操作,由于id自增,只能有一个服务器插入成功 )来创造一把唯一的锁,让三个服务都来争抢这把锁。
  • Commons-mq
    和后⾯讲的消息队列相关,也暂时不需要⼤家去关注
  • Commons-tool
    ⼯具module,不需要单独启动

4、mall-parent

规定jar包的版本,给整个项⽬来使⽤,作为别的API项⽬和Provider项⽬的⽗⼯程来使⽤

5、order-service

order-api
不需要启动,作为⼀个Jar包给别的服务提供依赖
Order-provider
Order服务的服务提供者,需要单独启动

6、Shopping-service

Shopping-api
不需要启动,作为⼀个Jar包给别的服务提供依赖
Shopping-provider
Shopping服务的服务提供者,需要单独启动,

7、user-service

  • user-api
  • user-provider
  • user-sdk
    作为jar包供user-service和gateway使用的。
    里面提供了一个自定义注解@Anoymous和TokenIntercepter。@Anoymous加在类上或者方法上表示本类或本方法不需要登陆认证,也就是不经过TokenIntercepter的拦截,TokenIntercepter用来实现token认证,其实就是判断当前操作是否需要登录。在gateway的WebConfig拦截器里面添加了一个tokenInterceptor。

所有的api都是定义接口的。
所有的provider都是暴露服务的。


dubbo启动报错:

微服务项目接口定义 微服务 项目结构_ide_04


因为我先启动了gateway,并没有启动user-provider。这样在注册中心中并没有发现user-provider暴露出来的服务。

应当先启动user-provider再启动gateway,也就是说一定要先启动服务提供者再启动服务消费者。

可以配置启动检查为false ,这样的话提供者消费者启动的时候就没有先后顺序了。

微服务项目接口定义 微服务 项目结构_jar包_05


购物车模块最后会用redis来实现。