環境配置:JDK8 +IDEA 開發工具java
**說明:下面搭建過程基於你本地已經配置好zookeeperweb
1、先搭建父工程(PS:是能夠不搭建父工程的,即每一個服務和client都是單獨的spring boot項目,也是OK的,搭建父工程純粹爲了將項目放在一塊兒,且pom文件能夠少一點而已!)spring
一、先搭建父工程:spring initial -- 第二步,Type改爲Maven Pom,Artifact改爲demo-parent,便於理解 -- 引入兩個依賴,web和zookeeper-discovery;搭建完後,記得改maven路徑,並刪除一些無用的文件api
【【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模塊建立,而後放入一些公共代碼。。。springboot
PS:點開對應的pom文件查看,會發現<parent>已是 咱們的 父工程 ,不用再手動修改;並且 父級pom文件<modules>也已經主動添加了common模塊app
可是src - main - java目錄下直接是空的,爲了和其餘模塊保持一致,在java路徑後 新建 com.example.common包,其餘全部公共代碼都放在這個下面maven
這裏是2019-08-13補充發現的 》》》以前api模塊,也是建的spring boot項目,是經過發佈到本地maven倉庫的方式,給provider和consumer模塊引用,而最開始,common模塊,我也是建成的spring boot項目,可是沒有發佈到本地maven倉庫(直接用IDEA的install是有問題的,解壓對應jar包發現多了BOOT-INF包),發現install父級項目時,一直報common裏面的 類找不到;ide
可是,如今common模塊是maven項目,用IDEA install後,解壓生成的jar包(maven本地倉庫的jar)發現仍是有BOOT-INF包,,,這個很好解決,在pom文件加入<skip>true</skip>便可,完整以下:spring-boot
<build> <plugins> <!--springboot打包插件--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build>
【api模塊是spring boot項目,模擬spring boot項目如何打包發佈到本地倉庫,而common模塊是Maven項目,模擬如何打包發佈到本地Maven倉庫】
二、再搭建一個服務,也就是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配置並無問題,也很簡單
三、搭建一個服務消費者:建立過程同(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
2、要最早啓動zookeeper服務,也能夠啓動zookeeper UI
3、依次啓動 server 和 client,再在瀏覽器調用測試方法,便可查看結果!