项目地址

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. Android RadioGroup+Fragment 底部导航

  2. MySQL基础知识_2

    ta表: tb表: MySQL 查询数据 SELECT 列名,列名 FROM 表名 [WHERE Clause] [LIMIT N][ OFFSET M] 查询语句中可以使用一个或者多个表,表之间使用 ...

  3. Jupyter的安装和基本使用

    1. 安装Jupyter pip install jupyter 2. Jupyter的初次使用 # 进入虚拟环境 workon ai # 输入命令 jupyter notebook 本地notebo ...

  4. form组件源码

  5. 题解 P2642 【双子序列最大和】

    前言 其实这道题的关键就是在于预处理,其方法类似于 合唱队形 正文 求最大子段和 要想求出双子序列最大和,首先我们要会求出最大子段和 最大子段和的求值方法很简单 定义 \(f_i\) 为以第 \(i\ ...

  6. Hadoop 集群的基准测试

    集群搭建完毕之后,需要对集群进行基准测试 第一方面:基本测试 服务启动,是否可用,简单的应用 *hdfs 读写操作 bin/hdfs dfs -mkdir - p /user/chris/tmp/co ...

  7. 模块 random 随机

    random 随机数 0 导入 >>> import random 1 random 随机小数 random.random() # 大于0且小于1之间的小数 0.7664338663 ...

  8. Python itchat库(1)

    一.实验环境 在cmd中输入以下命令,完成微信的API包itchat的安装. pip install itchat 注意这里有个问题,因为电脑里既有Python3.6,又有anaconda.所以一定要 ...

  9. 【每周小项目】使用 puppeteer 插件爬取动态网站

    目录 0. 前言 问题 解决 1. 下载与引包 2. 使用步骤 3. 爬过的几个坑 page.evaluate 的传参问题 元素操作问题 0. 前言 这两天对爬虫开始感兴趣,最开始是源于天涯的一个房价 ...

  10. D3属性大全

    https://www.cnblogs.com/bester-ace/articles/10948793.html https://www.cnblogs.com/qingmingsang/artic ...