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包:
然后在commons-core目录的target目录下就会有commons-core的jar包。
clean干掉jar包、package打包文件到target目录、install把jar包放到本地的maven仓库。
install完会在本地仓库中出现:
- 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启动报错:
因为我先启动了gateway,并没有启动user-provider。这样在注册中心中并没有发现user-provider暴露出来的服务。
应当先启动user-provider再启动gateway,也就是说一定要先启动服务提供者再启动服务消费者。
可以配置启动检查为false ,这样的话提供者消费者启动的时候就没有先后顺序了。
购物车模块最后会用redis来实现。