3.Kitty-Cloud服務搭建過程剖析

項目地址

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

<code> com.cxytiandi kitty-spring-cloud-starter-web true com.spring4all swagger-spring-boot-starter com.cxytiandi kitty-spring-cloud-starter-feign /<code>

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

<code> 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 /<code>

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

<code> 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 /<code>

kitty-cloud-article-api:依賴api定義模塊。

kitty-cloud-article-biz:依賴業務邏輯模塊。

spring-boot-starter-test:單元測試依賴。

服務啟動

provider作為服務的啟動模塊,依賴了api和biz。我們在provider中創建App啟動類。

<code>/** * 文章服務啟動類 * * @作者 尹吉歡 * @個人微信 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); } } /<code>

@EnableSwagger2Doc:啟用Swagger。

@MapperScan:Mybatis Mapper包掃描路徑。

@EnableDiscoveryClient:啟用服務發現。

@EnableCreateCacheAnnotation:jetCache中啟用註解創建緩存,比如 @CreateCache。

@EnableMethodCache:jetCache中啟用啟用方法上註解緩存,比如 @Cache。

@SpringBootApplication:Spring Boot核心註解,主要關注下scanBasePackages裡面的值,如果不配置,默認掃描啟動類所在包的路徑以及子路徑。

配置了就按配置的來,因為我們的啟動類在provider中,provider中的包名無法包含api和biz。

比如:

<code>com.cxytiandi.kittycloud.article.api com.cxytiandi.kittycloud.article.biz com.cxytiandi.kittycloud.article.provider /<code>

如果不手動指定scanBasePackages=com.cxytiandi.kittycloud.article的話就無法掃描api和biz。只能掃描到com.cxytiandi.kittycloud.article.provider。

com.cxytiandi.kitty.web.config是web模塊中有對Swagger靜態資源映射的配置,也需要掃描到。

服務配置

resources --> META-INF --> app.properties

<code># Cat中的應用名稱 app.name=kitty-cloud-article-provider /<code>

resources --> bootstrap.properties

<code># 服務名 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 /<code>

resources --> logback.xml

<code> /<code>

logback主要關注的就是這個CatAppender,不配置CatAppender的話當程序報錯的時候,error級別的日誌無法接入Cat。

關於作者:尹吉歡,簡單的技術愛好者,《Spring Cloud微服務-全棧技術與案例解析》, 《Spring Cloud微服務 入門 實戰與進階》作者, 公眾號

猿天地 發起人。個人微信 jihuan900, 歡迎勾搭。


關注我吧