项目地址

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。

Kitty-Cloud服务搭建过程剖析的更多相关文章

  1. HTTPS静态服务搭建过程详解

    HTTPS服务对于一个前端开发者来说是一个天天打招呼的老伙计了,但是之前我跟HTTPS打交道的场景一直是抓包,自己没有亲自搭建过HTTPS服务,对HTTPS的底层知识也是一知半解.最近正好遇到一个用户 ...

  2. 微信小程序语音识别服务搭建全过程解析(项目开源在github)

    silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...

  3. 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)

    silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...

  4. Spring Cloud云架构 - commonservice-sso服务搭建(一)

    前面几篇我们已经介绍了Spring Cloud和oauth2的知识点,今天我们要利用Spring Cloud和oauth2进行commonservice-sso服务搭建,本节我们只是搭建commons ...

  5. Spring Cloud云服务架构 - commonservice-config配置服务搭建

    1. 介绍 Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持.使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与 ...

  6. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

  7. Centos 6.5 pptpd服务端搭建过程

    首先检测有没有启用ppp和tun cat /dev/ppp cat /dev/net/tun 如果显示是这样的 cat: /dev/ppp: No such device or address cat ...

  8. spring cloud 服务注册中心eureka高可用集群搭建

    spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...

  9. 用Google Cloud Platform搭建***服务教程

    之前FQ一直用的是***,天有不测风云,前几天发现ss服务挂了.更可怕的是ping都ping不通,多方打听,***中文社区已经炸开锅了,原因就是IP被封了.需要付费更换IP.然后到现在还是没有给我更换 ...

随机推荐

  1. win10环境下如何修改Python pip的更新源?

    1.在window的文件夹窗口输入 : %APPDATA%2.在弹出的路径中新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件,然后再里面输入内容 [global] timeout = ...

  2. SpringMVC框架——原理及使用

    核心组件 1. DispatcherServlet:前端控制器器,负责调度其他组件的执行,可降低不同组件之间的耦合性,是Spring MVC 的核心模块. 2. Handler:处理器,完成具体的业务 ...

  3. Untargeted lipidomics reveals specific lipid abnormality in nonfunctioning human pituitary adenomas 非靶向脂质组学揭示非功能人类脑垂体瘤中的特异性脂质 (解读人:胡丹丹)

    文献名:Untargeted lipidomics reveals specific lipid abnormality in nonfunctioning human pituitary adeno ...

  4. Android 登陆功能的实现(访问WebServices 解析返回的JSON结果)

    1. WebServices返回的JSON结果 { , "Result": [{ ", ", ", " }] } 2.访问WEB服务代码 i ...

  5. .NET的资源并不限于.resx文件(二)

    ResourceManager在默认的情况下只能提供对内嵌于程序集的.resources资源文件的存取. 为了实现对独立二进制.resources资源文件的支持,我们自定义了BinaryResoruc ...

  6. Java中Comparable和Comparator的区别

    前言 最近复习遇到了这个问题,在此进行一个详细的记录,分享给大家. 两个接口的区别 包区别 Comparable接口是在java.lang下. Comparator接口是在java.util下. 使用 ...

  7. 从SqlSessionFactoryBean的引用浅谈spring两种bean模式

    mybatis是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory可以通过SqlSessionFactoryBuilder获得实例.使用mybatis-sp ...

  8. 带有路径压缩和rank优化的并查集实现

    public class unionfind2 implements UF { int[] parent; int[] rank; public unionfind2(int n) { parent= ...

  9. 老板说,Vim宏都不会用,你的工作效率太低啦~

    工作中,对于文本文件的编辑我们经常有这样的需求: 多次重复输入一段相同文本: 生成一段序列化的文本: 每行文本插入一句相同的文本. 除此之外,还有很多需要重复操作的动作.对于这些需求,如果我们人工去操 ...

  10. 编译原理:DFA最小化,语法分析初步

    1.将DFA最小化:教材P65 第9题   解析: 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 解析: S→ 0A|1B →S → 0(1S|1)|1(0S|0 ...