Kitty-Cloud服务搭建过程剖析
項目地址
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 項目,然后就需要創建子模塊了。創建子模塊也非常簡單,選中剛剛創建的 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-providerresources --> 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=trueresources --> 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。
參考資料
[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服务搭建过程剖析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件项目的开发流程
- 下一篇: 计算机视觉毕业后找不到工作怎么办?