學會此框架後讓我對微服務的理解更加深入java
本篇主要將的是dubbo+zookeeper+springboot的整合並測試,需看完個人前兩篇博客《dubbo理論》和《zookeeper》才能看懂本篇文章git
zookeeper環境(註冊中心)github
dubbo-admin:github下載,是一個監控後臺,輪詢的方式查看註冊了那些服務,那些服務被消費了web
dubbo (jar包,也能夠導入maven依賴)spring
注意:在啓用分佈式架構項目時,應先開啓zkserver(zookeeper服務)-->dubbo-admin(服務監控可視化)-》最後再運行springboot項目apache
能夠不安裝,由於它僅僅是一個監控服務的可視化api
1.下載dubbo-admintomcat
地址 :https://github.com/apache/dubbo-admin/tree/masterspringboot
二、解壓進入目錄服務器
修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址
server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest
dubbo.registry.address=zookeeper://127.0.0.1:2181
3.在項目目錄下打包dubbo-admin,cmd指令(用管理員權限)
也能夠用maven或idea打成jar包
mvn clean package -Dmaven.test.skip=true
4.找到指定目錄下的dubbo-admin.jar(用cmd指令運行)
java -jar dubbo-admin.jar
注意:再運行dubbo-admin前需開啓zookeeper服務,
zookeeper開啓成功界面
dubbo-admin開啓成功界面
執行完畢,咱們去訪問一下 http://localhost:7001/ , 這時候咱們須要輸入登陸帳戶和密碼,咱們都是默認的root-root;
證實dubbo-admin安裝成功
新建兩個springboot項目模塊,用來模仿服務提供者,和服務消費者,項目進導入web便可
1.提供者搭建配置
導入相關依賴
<!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除這個slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
在properties中配置dubbo信息
server.port=8001
#當前應用名字
dubbo.application.name=provider-server
#註冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#掃描指定包下服務
dubbo.scan.base-packages=com.king.service
注意:我是在一臺服務器上跑兩個項目因此我由額外配置了tomcat的端口號
建一個service接口和實現類
package com.king.service; public interface TicketService { public String getTicket(); }
package com.king.service; import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; //zookeeper服務的註冊與發現 @Service //被掃描到,在項目啓動中就自動註冊到註冊中心,將服務發佈出去,註解註解來源:apache, @Component //放到spring容器中 public class TicketServiceImpl implements TicketService{ @Override public String getTicket() { return "《分佈式系統之路》"; } }
注意:註解@Service調的是dubbo的,做用:讓dubbo框架掃描的
到這裏簡單的服務提供者就完成了,下面運行主啓動類,測試
注意:在啓動項目時,先以開啓zkserver-->dubbo-admin-->springboot項目的順序一次打開,不然報錯!!!
經過dubbo-admin的7001端口就能夠查看是否註冊成功
2.服務消費者搭建
導入相關依賴。跟提供者同樣的依賴
<!--dubbo--> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!--zookeeper--> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除這個slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
在application.properties配置消費者信息
server.port=8082 #當前應用名字 dubbo.application.name=consumer-server #註冊中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
新建server類
注意:正常企業級開發,服務的發現過程是經過導報指定的服務接口得到,讓後經過pom引入,此處爲了方便就直接引用了,引用方式看代碼
import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service public class UserService { //咱們須要去拿註冊中心的服務 //需求:如今咱們的用戶想使用買票的服務,這要怎麼弄呢 ? @Reference //僅需定義相同路徑和名字相同的接口就能使用 ,企業用pom座標 TicketService ticketService; public void buyTicket(){ String ticket = ticketService.getTicket(); System.out.println("在註冊中心拿到=》"+ticket); } }
這個做用就是接收引用信息的接口
package com.king.service; public interface TicketService { public String getTicket(); }
單元測,並運行
import com.king.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }