Apache Dubbo 是一款微服務開發框架,它提供了 RPC通信 與 微服務治理 兩大關鍵能力。這意味着,使用 Dubbo 開發的微服務,將具備相互之間的遠程發現與通信能力, 同時利用 Dubbo 提供的豐富服務治理能力,可以實現諸如服務發現、負載均衡、流量調度等服務治理訴求。同時 Dubbo 是高度可擴展的,用戶幾乎可以在任意功能點去定制自己的實現,以改變框架的默認行為來滿足自己的業務需求。
zk參考:https://blog.csdn.net/qq_43472877/article/details/111177298
dubbo參考:https://blog.csdn.net/muriyue6/article/details/109304584
dubbo官方文檔:https://dubbo.apache.org/zh/docs/quick-start/
dubbo示例代碼:https://github.com/apache/dubbo-samples
1、下載zookeeper:https://dlcdn.apache.org/zookeeper/
會列出很多,下載最新版本的,要下載帶bin的文件:apache-zookeeper-3.7.0-bin.tar.gz
2、解壓,找到/conf/zoo_sample.cfg復制一個,修改名字為:zoo.cfg
3、找到/bin/zkServer.cmd這是服務端,以管理員身份運行,要開啟,保持不要關閉。可能會報錯:ZooKeeper audit is disabled.
需要編輯zkServer.cmd,在call %JAVA%后加上"-Dzookeeper.audit.enable=true" 注意前后空格隔開
4、管理員身份運行客戶端/bin/zkCli.cmd,保持開啟,不要關閉。zookeeper端口默認是2181
5、客戶端可以執行命令:
create /keyname value 創建一個鍵值對
應該還有其他命令,命令的作用,我還沒研究。
6、下載dubbo-admin,這是一個服務監控程序,可以看到注冊了哪些服務:https://github.com/apache/dubbo-admin/
解壓,然后cmd進入解壓目錄,然后執行命令 mvn clean compile package -Dmaven.test.skip=true,打包dubbo,要下包很慢。也可以用idea打開,自動導入包,然后打包。
dubbo-admin的賬戶密碼默認是root、root。最新版的前端是用vue寫的,我執行npm install總是不成功,建議下載 master-0.2.0這個。
運行dubbo-admin,訪問:http://localhost:7001/,可以看到所有注冊的服務和相關監控信息。
7、執行jar包,進入jar包目錄 java -jar jar包路徑
8、服務端和消費端pom.xml依賴,pom依賴是一樣的,我用的最新版本的dubbo V3.0.2
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>3.0.2</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
老是報錯:log4j的警告,百度了說是log4j和logback沖突,搞半天也沒解決。
9、服務端接口與啟動類標注
package com.jay.service; public interface BookService { String getBook(); }
實現:類上面要加@DubboService,標注這是一個要注冊到zookeeper的dubbo服務
package com.jay.service; import org.apache.dubbo.config.annotation.DubboService; @DubboService public class BookServiceImpl implements BookService { @Override public String getBook() { return "《星辰變》"; } }
服務端的啟動類要開啟Dubbo服務發現,要標注@EnableDubbo,不然發現不了你寫的@DubboService,就沒法注冊到zookeeper了。
package com.jay; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDubbo @SpringBootApplication public class ProviderServerApplication { public static void main(String[] args) { SpringApplication.run(ProviderServerApplication.class, args); } }
10、消費端,需要引入服務端打包后的jar包,或者建一個和服務端一樣路徑(包名)和名稱的接口,我用的是后者。
package com.jay.service; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserService { @DubboReference private BookService bookService; @GetMapping("/test") public String test() { return bookService.getBook(); } }
自動注入的bookService上面標注@DubboReference,說明他是要去指定的服務器中尋找的。
保持zookeeper的zkServer.cmd和zkCli.cmd都是以管理員角色開着。
運行服務端和消費端,訪問消費端:http://localhost:9002/test,就會輸出了。
11、配置文件忘了說,補上
服務端配置:四個配置,端口號、服務名稱、服務注冊地址和端口、服務掃描包名
server.port=9001 dubbo.application.name=provider-server dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.scan.base-packages=com.jay.service
消費端配置:
server.port=9002 dubbo.application.name=consumer-server dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.scan.base-packages=com.jay.service
結束,這只是最簡單的一個例子,其他的我還沒研究,誰研究的多,請留言告訴我一下,謝了。