市面上大概是用兩種方式使用微服務,①dubbo,②,springcloud;java
dubbo是使用rpc進行服務調度,而springcloud是用輕量級的http方式;dobbo側重於服務間通訊,在負載均衡,網關,路由,熔斷方面依賴於第三方,而springcloud則提供了一整套完整的解決方案。且zookeeper偏向於保證一致性,而springcloud 的eureka 是偏向於高可用的。git
①,docker安裝zookeepergithub
#拉取zookeeper,使用鏡像加速,不然極可能下載不下來 docker pull registry.docker-cn.com/library/zookeeper #運行zookeeper鏡像 #--name 指定容器名,-p 表示暴露的端口 --restart 自動重啓 -d 後臺運行,最後帶上鏡像id docker run --name zk -p 2181:2181 --restart always -d bf5cbc9d5cac
②,dubbo如今是apache的項目web
官網地址:http://dubbo.apache.org/spring
③,點擊view to GitHub,這裏有springboot整合dubbo的詳細說明docker
這裏以springboot的1.5x版本爲例apache
①,利用idea先建立一個空工程,而後給其添加,api模塊,provide模塊,customer模塊api
②,eclipse中直接建立一個類型爲pom是父工程,而後右鍵父工程給其添加maven模塊便可。瀏覽器
①,做用:用於定義公共的接口,給provider和customer依賴springboot
②,pom.xml
<--用於構建項目--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
③,定義一個買票接口
public interface TicketService { String buyTicket(); }
④,利用maven插件將api工程安裝到maven倉庫,供provider和customer依賴
⑤,雙擊install
⑥,當控制檯輸出BUILD SUCCESS,說明安裝成功
①,pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.12.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入dubbo的場景啓動器--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.0</version> </dependency> <!-- 引入zookeeper的客戶端 --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!--引入公共的api--> <dependency> <groupId>com.api</groupId> <artifactId>api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
②,application.properties 配置
#應用名 dubbo.application.name=ticket-provider #註冊地址 dubbo.registry.address=zookeeper://192.168.43.28:2181 #須要掃描的包 dubbo.scan.base-packages=com.provider.ticketprovider.ticket.service.impl
③,編寫提供者
import com.api.api.ticket.service.TicketService; import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Service; @Component //這個是dobbo的Service 註解 @Service public class TicketServiceImpl implements TicketService { @Override public String buyTicket() { return "《死亡筆記》"; } }
因爲TicketServiceImpl 加上了dubbo的@Service註解,在應用啓動後,會將這個提供者註冊到zookeeper,這樣消費者就能消費這個服務。
①,pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.12.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入dubbo的場景啓動器--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.1.0</version> </dependency> <!-- 引入zookeeper的客戶端 --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!--引入公共的api--> <dependency> <groupId>com.api</groupId> <artifactId>api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
②,application.properties 配置
dubbo.application.name=ticket-customer dubbo.registry.address=zookeeper://192.168.43.28:2181 server.port=8083
③,controller層代碼
import com.alibaba.dubbo.config.annotation.Reference; import com.api.api.ticket.service.TicketService; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class CustomerController { // 將會獲得Ticket服務 @Reference private TicketService ticketService; @RequestMapping("/") public String index(){ return ticketService.buyTicket(); } }
①,先啓動provider
②,再啓動customer
③,瀏覽器調度消費者的消費方法
④,看到上圖,說明調度成功