美文网首页
Kitty-Cloud服务搭建过程剖析

Kitty-Cloud服务搭建过程剖析

作者: 猿天地 | 来源:发表于2020-04-16 13:22 被阅读0次

    项目地址

    https://github.com/yinjihuan/kitty-cloud

    服务搭建

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

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

    创建Maven多模块项目

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

    或者直接在IDEA中创建一个Maven项目,选择菜单Filte --> New --> Project --> Maven项目,然后依次填写信息,最后会生成一个Maven项目。

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

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

    添加相关框架的依赖

    api依赖

    <dependencies>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-web</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-feign</artifactId>
        </dependency>
    </dependencies>
    

    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依赖

    <dependencies>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-cloud-user-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-mybatis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-nacos</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-jetcache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-cat</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-spring-cloud-starter-lock</artifactId>
        </dependency>
    </dependencies>
    

    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依赖

    <dependencies>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-cloud-article-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.cxytiandi</groupId>
            <artifactId>kitty-cloud-article-biz</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

    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

    <appender name="CatAppender" class="com.dianping.cat.logback.CatLogbackAppender"></appender>
    <root level="INFO">
        <appender-ref ref="CatAppender" />
    </root>
    

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

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

    相关文章

      网友评论

          本文标题:Kitty-Cloud服务搭建过程剖析

          本文链接:https://www.haomeiwen.com/subject/ddjrvhtx.html