摘要:為什么要用dubbo? 還是讓官方來解釋吧:http://dubbo.io/User+Guide-zh.htm http://dubbo.io/ 一般 nginx+tomcat | ----> Controller1--------->service1請求----->nginx |
為什么要用dubbo?
還是讓官方來解釋吧:
http://dubbo.io/User+Guide-zh.htm http://dubbo.io/
一般 nginx+tomcat
| ----> Controller1--------->service1
請求----->nginx |
|----->Controller2--------->service2
請求進了Controller 就只有一條路可以走了
使用dubbo后
| ------->service1
請求------>Controller----> |
|---------->service2
簡單的說 也就是 一個Contoller 我可以部署多個 service 。
一般的mvc項目 包含 Controller、Servicei、ServiceImpl、dao三層
使用doubbo我們可以把項目拆分:
Controller 作為 “消費著” 一個項目
ServiceImpl +dao 作為 “提供者” 一個項目
Servicei “接口” 可以作為一個項目
我們可以部署多個“提供著”。。。。。。。。。。。。。。。。。。。
Zookeeper作為Dubbo服務(wù)的注冊中心,Dubbo原先基于數(shù)據(jù)庫的注冊中心,沒采用Zookeeper,Zookeeper一個分布式的服務(wù)框架,是樹型的目錄服務(wù)的數(shù)據(jù)存儲,能做到集群管理數(shù)據(jù) ,這里能很好的作為Dubbo服務(wù)的注冊中心,Dubbo能與Zookeeper做到集群部署,當(dāng)提供者出現(xiàn)斷電等異常停機時,Zookeeper注冊中心能自動刪除提供者信息,當(dāng)提供者重啟時,能自動恢復(fù)注冊數(shù)據(jù),以及訂閱請求。我們先在linux上安裝Zookeeper,我們安裝最簡單的單點
Windons 安裝Zookeeper
1,Zookeeper 官網(wǎng)下載windons 版本,(不會下載百度)
單機安裝非常簡單,只要獲取到 Zookeeper 的壓縮包并解壓到某個目錄如
Zookeeper 的啟動腳本在 bin 目錄下,Windows 下的啟動腳本是 zkServer.cmd。
在你執(zhí)行啟動腳本之前,還有幾個基本的配置項需要配置一下,Zookeeper 的配置文件在 conf 目錄下,這個目錄下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是將 zoo_sample.cfg 改名為 zoo.cfg,因為 Zookeeper 在啟動時會找這個文件作為默認(rèn)配置文件。下面詳細(xì)介紹一下,這個配置文件中各個配置項的意義。
打開以后
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2181
ickTime:這個時間是作為 Zookeeper 服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發(fā)送一個心跳。
dataDir:顧名思義就是 Zookeeper 保存數(shù)據(jù)的目錄,默認(rèn)情況下,Zookeeper 將寫數(shù)據(jù)的日志文件也保存在這個目錄里。
clientPort:這個端口就是客戶端連接 Zookeeper 服務(wù)器的端口,Zookeeper 會監(jiān)聽這個端口,接受客戶端的訪問請求。
二.dubbo-admin。 dubbo管控臺的安裝
下載地址 http://dubbo.io/Download-zh.htm
下載 dubbo-admin-2.5.3.war
解壓之后:
修改 META-INF/dubbo.properties文件
dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.admin.root.password=root dubbo.admin.guest.password=guest
address:zookeeper 的ip地址 后面是端口號 ,和zookeeper中配置的端口號一樣
修改完成后需要一個tomcat 打開tomcat \webapps\ROOT 目錄 ,此目錄放置的是tomcat的首頁,刪除所有的文件,將解壓后修改好的所有的dubbo-admin 里的文件復(fù)制到 \webapps\ROOT中,
此時我們已經(jīng)配置好了?,F(xiàn)在可以啟動tomcat了 (主意:在啟動tomcat之前要先啟動zookeeper ,啟動zookeeper前面有介紹)。 啟動tomcat之后 在瀏覽器輸入 http://localhost:8080 (我的是8083) 進入dubbo管控臺的主頁
用戶名和密碼就是dubbo.properties 中配置的 默認(rèn)的是 用戶名 :root, 密碼:root
輸入用戶名和密碼之后 進入首頁
當(dāng)然現(xiàn)在還沒有 消費者 和 提供者
現(xiàn)在我們來開發(fā) 消費者 和 提供者
配置 好 zookeeper之后 搭建 maven+springmvc+dubbo環(huán)境
新建3個maven項目
1,test-dubbo-provider ,java項目,作為提供者,serviceImpl 和dao 層
2,test-public-interface ,java項目,存放公共的接口 ,servicei 是service的接口 (備注:1要依賴2, 3也要依賴2)
3,test-web-consumer,web項目,存放 Controller 和 頁面
首先我們來開發(fā) 服務(wù)的提供者也就是 test-dubbo-provider ,目錄結(jié)構(gòu)為
ApplicationContent-dubbo.xml dubbo服務(wù)的配置文件(名字隨意) (待會再介紹)
ApplicationContent.xml spring的配置文件
這兩個配置文件 必須要放到 MATE-INF/spring/下面 (原因后面再說)
UserServiceImpl.java 借口的實現(xiàn)類
package com.cl.user.serviceImpl; import org.springframework.stereotype.Service; import com.cl.user.servicei.UserService; @Service("userService") public class UserServiceImpl implements UserService{ @Override public String sayHello() { System.out.println("hello world----------------------------"); return "hello world"; } }
有了 實現(xiàn)類 還需要接口 也就是項目test-public-interface
這個項目很簡單 只需要 接口 就行了
package com.cl.user.servicei; public interface UserService { public String sayHello(); }
當(dāng)然 項目 1 要 依賴 項目 2
所以在1 的 pom.xml 中 有
<dependency> <groupId>test-web</groupId> <artifactId>test-pubilc-interface</artifactId> 加入項目2依賴 <version>0.0.1-SNAPSHOT</version> <scope>test</scope> </dependency>
那么 1 中的 UserServiceImpl 就可以實現(xiàn) UserService接口
當(dāng)然我們用到 dubbo 就要有dubbo的核心jar包 所以在1 的 pom.xml 中 有
1 <dependency> 2 <groupId>com.alibaba</groupId> 3 <artifactId>dubbo</artifactId> 4 <version>2.5.3</version> 5 </dependency>
還要有 zookeeper的 所以在1 的 pom.xml 中 有
1 <dependency> 2 <groupId>org.apache.zookeeper</groupId> 3 <artifactId>zookeeper</artifactId> 4 <version>3.3.3</version> 5 </dependency>
下面介紹一下項目1 中 的 ApplicationContent-dubbo.xml 和 ApplicationContent.xml
ApplicationContent.xml 主要是spring的配置 不多說。
<!-- 啟動組件掃描,排除@Controller組件,該組件由SpringMVC配置文件掃描 --> <context:component-scan base-package="com.cl.user.serviceImpl"/>
ApplicationContent-dubbo.xml dubbo服務(wù)的配置
<!-- 提供方應(yīng)用信息,用于計算依賴關(guān)系 --> <dubbo:application name="hehe_provider" /> <!-- 使用zookeeper注冊中心暴露服務(wù)地址 端口是zookeeper 中配置的2181--> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> --> <!-- 用dubbo協(xié)議在20880端口暴露服務(wù) --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 具體的實現(xiàn)bean --> <bean id="userService" class="com.cl.user.serviceImpl.UserServiceImpl" /> <!-- 聲明需要暴露的服務(wù)接口 --> <dubbo:service interface="com.cl.user.servicei.UserService" ref="userService" />
主意:有可能你的配置文件中不識別 <dubbo:> 去網(wǎng)上找解決的辦法
到這里我們的 “提供者” 即 服務(wù) 已經(jīng)開發(fā)完了,那么如何啟動服務(wù)呢? 在項目1中有個start.java
package com.test; import org.apache.log4j.PropertyConfigurator; public class start { static{ PropertyConfigurator.configure("src/main/resources/log4j.properties"); } public static void main(String[] args) { com.alibaba.dubbo.container.Main.main(args); } }
主意里面有main方法,可以直接運行啟動了。別急?。?! 之前還有個問題就是為什 ApplicationContent-dubbo.xml 和 ApplicationContent.xml 這兩個配置文件 必須要放到 /MATE-INF/spring/下面
因為 com.alibaba.dubbo.container.Main.main(args) 默認(rèn)就會去加載 /MATE-INF/spring/ 下的配置文件
我們來看一下源碼
看完源碼 這下明白為什么了吧?。。。。。。。。。。。。。。。?!
啟動服務(wù)后 我們在 dubbo-admin中就能看到我們剛才開發(fā)的的 “提供者”
192.168.56.1 是本地局域網(wǎng) 地址
這是 “提供者” 此時還沒有“消費者” 接下來我們就要開發(fā) “消費者”