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項目。

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

比如你創建了一個空的Kitty-Cloud項目,然後就需要創建子模塊了。創建子模塊也非常簡單,選中剛剛創建的Kitty-Cloud,右鍵選擇New --> Module --> Maven 依次填寫信息,跟上面的一樣。

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

子模塊下面我們還細分了三個子模塊,分別是api,biz,provider。所以還需要按照上面的步驟分別創建這三個子模塊。成功後就是下圖的效果:

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

添加相關框架的依賴

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, 歡迎勾搭。


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

關注我吧


分享到:


相關文章: