项目地址
https://github.com/yinjihuan/kitty-cloud[1]

服务搭建
大家目前看到的都是我已经搭建好了的服务,如果让你从零开始自己搭建一个微服务的项目,要怎么做?

我们以 kitty-cloud-article 服务来进行讲解,希望大家看完后也能自己动手大家一个属于你自己的微服务项目。

创建 Maven 多模块项目
创建 Maven 项目有很多种方式,一般创建 Spring Boot 的 Maven 项目我们会用 https://start.spring.io/[2] 这个页面提供的工具来生成,然后导入到 IDEA 中就可以了。

或者直接在 IDEA 中创建一个 Maven 项目,选择菜单 Filte --> New --> Project --> Maven 项目,然后依次填写信息,最后会生成一个 Maven 项目。
Kitty-Cloud服务搭建过程剖析_第1张图片

比如你创建了一个空的 Kitty-Cloud 项目,然后就需要创建子模块了。创建子模块也非常简单,选中刚刚创建的 Kitty-Cloud,右键选择 New --> Module --> Maven 依次填写信息,跟上面的一样。

Kitty-Cloud服务搭建过程剖析_第2张图片

子模块下面我们还细分了三个子模块,分别是 api,biz,provider。所以还需要按照上面的步骤分别创建这三个子模块。成功后就是下图的效果:

Kitty-Cloud服务搭建过程剖析_第3张图片

添加相关框架的依赖
api 依赖


    
        com.cxytiandi
        kitty-spring-cloud-starter-web
        true
    
    
        com.spring4all
        swagger-spring-boot-starter
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-feign
    

kitty-spring-cloud-starter-web:web 依赖,基于 spring-boot-starter-web 包装的,源码在 kitty 仓库中。optional 设置为 true 是不想强依赖,这边只是要用到 Spring 里面的内容。如果哪个模块依赖 api 模块,那么需要该模块自身有 web 的依赖。

swagger-spring-boot-starter:swagger 依赖,用于生成 swagger 文档。

kitty-spring-cloud-starter-feign:feign 依赖,基于 spring-cloud-starter-openfeign 包装的,源码在 kitty 仓库中。

biz 依赖


    
        com.cxytiandi
        kitty-cloud-user-api
        1.0-SNAPSHOT
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-web
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-mybatis
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-nacos
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-jetcache
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-cat
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-dubbo
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-sentinel
    
    
        com.cxytiandi
        kitty-spring-cloud-starter-lock
    

kitty-cloud-user-api:需要调用用户服务的接口,所以这边依赖了用户服务的 API 模块。这也是我们为什么要讲 API 模块单独抽出来的原因,方便其他服务依赖然后调用服务中的接口。

kitty-spring-cloud-starter-mybatis:mybatis 依赖,基于 mybatis-plus 包装。

kitty-spring-cloud-starter-nacos:nacos 依赖,基于 spring-cloud-starter-alibaba-nacos-discovery 包装。

kitty-spring-cloud-starter-jetcache: jetcache 依赖,基于 jetcache-starter-redis 包装。

kitty-spring-cloud-starter-cat:cat 依赖,基于 cat-client 包装。

kitty-spring-cloud-starter-dubbo:dubbo 依赖,基于 spring-cloud-starter-dubbo 包装。依赖 dubbo 是为了同时支持 Http 和 Rpc 两种协议。

kitty-spring-cloud-starter-sentinel:sentinel 依赖,基于 spring-cloud-starter-alibaba-sentinel 包装。

kitty-spring-cloud-starter-lock:分布式锁依赖,基于 redisson-spring-boot-starter包装。

provider 依赖


    
        com.cxytiandi
        kitty-cloud-article-api
        1.0-SNAPSHOT
    
    
        com.cxytiandi
        kitty-cloud-article-biz
        1.0-SNAPSHOT
    
    
        org.springframework.boot
        spring-boot-starter-test
        test
    

kitty-cloud-article-api:依赖 api 定义模块。

kitty-cloud-article-biz:依赖业务逻辑模块。

spring-boot-starter-test:单元测试依赖。

服务启动
provider 作为服务的启动模块,依赖了 api 和 biz。我们在 provider 中创建 App 启动类。

/**
 * 文章服务启动类
 *
 * @作者 尹吉欢
 * @个人微信 jihuan900
 * @微信公众号 猿天地
 * @GitHub https://github.com/yinjihuan
 * @作者介绍 http://cxytiandi.com/about
 * @时间 2020-02-12 20:01:04
 */
@EnableSwagger2Doc
@MapperScan("com.cxytiandi.kittycloud.article.biz.dao")
@EnableDiscoveryClient
@EnableCreateCacheAnnotation
@EnableMethodCache(basePackages = "com.cxytiandi.kittycloud.article.biz.manager")
@SpringBootApplication(scanBasePackages = {"com.cxytiandi.kittycloud.article","com.cxytiandi.kitty.web.config"})
public class KittyCloudArticleProviderApp {
    public static void main(String[] args) {
        SpringApplication.run(KittyCloudArticleProviderApp.class);
    }
}

@EnableSwagger2Doc:启用 Swagger。

@MapperScan:Mybatis Mapper 包扫描路径。

@EnableDiscoveryClient:启用服务发现。

@EnableCreateCacheAnnotation:jetCache 中启用注解创建缓存,比如 @CreateCache。

@EnableMethodCache:jetCache 中启用启用方法上注解缓存,比如 @Cache。

@SpringBootApplication:Spring Boot 核心注解,主要关注下 scanBasePackages 里面的值,如果不配置,默认扫描启动类所在包的路径以及子路径。

配置了就按配置的来,因为我们的启动类在 provider 中,provider 中的包名无法包含 api 和 biz。

比如:

com.cxytiandi.kittycloud.article.api
com.cxytiandi.kittycloud.article.biz
com.cxytiandi.kittycloud.article.provider

如果不手动指定 scanBasePackages=com.cxytiandi.kittycloud.article 的话就无法扫描 api 和 biz。只能扫描到 com.cxytiandi.kittycloud.article.provider。

com.cxytiandi.kitty.web.config 是 web 模块中有对 Swagger 静态资源映射的配置,也需要扫描到。

服务配置
resources --> META-INF --> app.properties

# Cat中的应用名称
app.name=kitty-cloud-article-provider

resources --> bootstrap.properties

# 服务名
spring.application.name=kitty-cloud-article-provider
# dubbo配置
dubbo.scan.base-packages=com.cxytiandi.kittycloud.article.provider.service
dubbo.protocol.name=dubbo
dubbo.protocol.port=20081
dubbo.registry.address=spring-cloud://localhost
# nacos注册服务端地址
spring.cloud.nacos.discovery.server-addr=47.105.66.210:8848
# nacos配置服务端地址
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
# sentinel数据源地址
spring.cloud.sentinel.datasource.nacos.server-addr=${spring.cloud.nacos.discovery.server-addr}
# mysql配置信息(原始配置在Nacos中存储)
spring.cloud.nacos.config.ext-config[0].data-id=kitty-cloud-mysql.properties
spring.cloud.nacos.config.ext-config[0].group=MIDDLEWARE_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
# 应用配置信息(原始配置在Nacos中存储)
spring.cloud.nacos.config.ext-config[1].data-id=kitty-cloud-article-provider-application.properties
spring.cloud.nacos.config.ext-config[1].group=APPLICATION_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true
# jetcache配置信息(原始配置在Nacos中存储)
spring.cloud.nacos.config.ext-config[2].data-id=kitty-cloud-redis-jetcache.properties
spring.cloud.nacos.config.ext-config[2].group=MIDDLEWARE_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true
# sentinel配置信息(原始配置在Nacos中存储)
spring.cloud.nacos.config.ext-config[3].data-id=kitty-cloud-sentinel.properties
spring.cloud.nacos.config.ext-config[3].group=MIDDLEWARE_GROUP
spring.cloud.nacos.config.ext-config[3].refresh=true
# redisson配置信息(原始配置在Nacos中存储)
spring.cloud.nacos.config.ext-config[4].data-id=kitty-cloud-redis-redisson.properties
spring.cloud.nacos.config.ext-config[4].group=MIDDLEWARE_GROUP
spring.cloud.nacos.config.ext-config[4].refresh=true

resources --> logback.xml



    

logback 主要关注的就是这个 CatAppender,不配置 CatAppender 的话当程序报错的时候,error 级别的日志无法接入 Cat。

参考资料
[1] kitty-cloud: https://github.com/yinjihuan/kitty-cloud
[2] spring.io: https://start.spring.io

关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号 猿天地 发起人。个人微信 jihuan900, 欢迎勾搭。

相关推荐

  • 双剑合璧的开源项目Kitty-Cloud
  • Kitty-Cloud环境准备

后台回复 学习资料 领取学习视频
Kitty-Cloud服务搭建过程剖析_第4张图片