Spring Cloud 整合 Zookeeper 實現 微服務 - 附:父子項目搭建步驟


環境配置:JDK8 +IDEA 開發工具

**說明:下面搭建過程基於你本地已經配置好zookeeper

 

一、先搭建父工程(PS:是可以不搭建父工程的,即每個服務和client都是單獨的spring boot項目,也是OK的,搭建父工程純粹為了將項目放在一起,且pom文件可以少一點而已!)

 

1、先搭建父工程:spring initial -- 第二步,Type改成Maven Pom,Artifact改成demo-parent,便於理解 -- 引入兩個依賴,web和zookeeper-discovery;搭建完后,記得改maven路徑,並刪除一些無用的文件

【【Create New Project -- 選Maven -- Next -- 填寫GroupId:com.example,ArtifactId:dubbo-parent -- Next -- 如果Project name和ArtifactId不一致,可以改成一樣的,再設置項目存放路徑(要先建好dubbo-parent的文件夾,再指定到該文件夾下面,否則會出現很噴飯的情況) -- Finish;完成創建,創建完后,要立即設定 項目Maven的路徑,並刪掉src目錄 》》》這樣生成的Maven項目,pom文件是空的,要手動引入spring boot作為<parent>依賴,等其他配置,如果不想手動配,就直接將dubbo-parent也建成spring boot項目類型】】

 

 

附:像 common模塊,不要建成spring boot項目,直接建成 maven項目,步驟:右鍵父項目 -- new -- module -- 選Maven -- next -- 填寫ArtifactId為dubbo-common -- next -- 如果Module name和ArtifactId不一致,可以改成一致的 -- finish;完成common模塊創建,然后放入一些公共代碼。。。

PS:點開對應的pom文件查看,會發現<parent>已經是 我們的 父工程 ,不用再手動修改;而且 父級pom文件<modules>也已經主動添加了common模塊

但是src - main - java目錄下直接是空的,為了和其他模塊保持一致,在java路徑后 新建 com.example.common包,其他所有公共代碼都放在這個下面

這里是2019-08-13補充發現的 》》》之前api模塊,也是建的spring boot項目,是通過發布到本地maven倉庫的方式,給provider和consumer模塊引用,而最開始,common模塊,我也是建成的spring boot項目,但是沒有發布到本地maven倉庫(直接用IDEA的install是有問題的,解壓對應jar包發現多了BOOT-INF包),發現install父級項目時,一直報common里面的 類找不到;

但是,現在common模塊是maven項目,用IDEA install后,解壓生成的jar包(maven本地倉庫的jar)發現還是有BOOT-INF包,,,這個很好解決,在pom文件加入<skip>true</skip>即可,完整如下:

<build>
        <plugins>
            <!--springboot打包插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>
解決install多出BOOT-INF包問題

【api模塊是spring boot項目,模擬spring boot項目如何打包發布到本地倉庫,而common模塊是Maven項目,模擬如何打包發布到本地Maven倉庫】

 

2、再搭建一個服務,也就是provider:在(1)搭建好的demo-parent上右鍵 -- new -- module -- Spring Initializr -- next -- Artifact改成demo-server,Package也可以優化改一下 -- next,這里是服務端,會有DB的操作,所有引入了mongoDB --next --finish;然后:

完成后吧pom文件的parent改成(1)中父工程的;

改配置文件。用yml形式,配置zookeeper

再隨便建個Cintroller,定義一個測試接口

最后Application程序入口添加注解@EnableDiscoveryClient

》》先啟動zookeeper,zookeeper后台也要運行jar包才能訪問9090端口查看

巨坑之:發現測試接口一直報404,還另外新建了一個項目來對比,發現controller路徑放錯了,改成和Application同級下,一切OK了!

而zookeeper配置並沒有問題,也很簡單

 

3、搭建一個服務消費者:創建過程同(2)里面的,只是Artifact改成demo-client,引入的依賴改成,然后:

完成后吧pom文件的parent改成(1)中父工程的;

改配置文件。用yml形式,配置zookeeper,其中spring.cloud.zookeeper.discovery.register=false,也再ZK UI就不會出現了

定義一個用@FeignClient(value = "server-name")的接口,里面方法對應服務里面提供的方法,且server-name與服務提供里面配置的spring.application.name的值對應,示例如下:

@FeignClient(value = "server yml 文件 spring.application.name 對應的值")
public interface FeignService {

    @RequestMapping("/test")
    String printString(@RequestParam(name="name") String name);
}

再隨便建個Controller,定義一個測試接口,接口里面調用接口里面的方法即可,示例如下:

  @Autowired
    FeignService feignService;
  //注意這里client/test是客戶端自己定義的調用url,且、且、且千萬不能/開頭,即/client/test,是會報錯的,服務調不通
    @RequestMapping("client/test")
    public String ps(String name){
        return feignService.printString(name);
    }

最后Application程序入口添加注解@EnableDiscoveryClient和@EnableFeignClients

 

二、要最先啟動zookeeper服務,也可以啟動zookeeper UI

 

三、依次啟動 server 和 client,再在瀏覽器調用測試方法,即可查看結果!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM