關於Maven+Springmvc+Dubbo+Zookeeper整合
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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
|
- tickTime:這個時間是作為 Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
- dataDir:顧名思義就是 Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。
- clientPort:這個埠就是客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求。
1 2 3 |
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 裡的檔案複製到 \webapps\ROOT中,
此時我們已經配置好了。現在可以啟動tomcat了 (主意:在啟動tomcat之前要先啟動zookeeper ,啟動zookeeper前面有介紹)。 啟動tomcat之後 在瀏覽器輸入 http://localhost:8080 (我的是8083) 進入dubbo管控臺的主頁
(備註:使用jdk1.8 tomcat啟動可能會出錯 有關 URI。。。。 的錯誤。我最後換成1.7了)
使用者名稱和密碼就是dubbo.properties 中配置的 預設的是 使用者名稱 :root, 密碼:root
輸入使用者名稱和密碼之後 進入首頁
當然現在還沒有 消費者 和 提供者 現在我們來開發 消費者 和 提供者 配置 好 zookeeper之後 搭建 maven+springmvc+dubbo環境 新建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 和 頁面 首先我們來開發 服務的提供者也就是 test-dubbo-provider ,目錄結構為 ApplicationContent-dubbo.xml dubbo服務的配置檔案(名字隨意) (待會再介紹) ApplicationContent.xml spring的配置檔案 這兩個配置檔案 必須要放到 MATE-INF/spring/下面 (原因後面再說) UserServiceImpl.java 藉口的實現類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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"
;
}
}
|
1 2 3 4 5 6 |
package
com.cl.user.servicei;
public
interface
UserService {
public
String sayHello();
}
|
當然 專案 1 要 依賴 專案 2
所以在1 的 pom.xml 中 有
1 <dependency> 2 <groupId>test-web</groupId> 3 <artifactId>test-pubilc-interface</artifactId> 加入專案2依賴 4 <version>0.0.1-SNAPSHOT</version> 5 <scope>test</scope> 6 </dependency>
那麼 1 中的 UserServiceImpl 就可以實現 UserService介面
當然我們用到 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的配置 不多說。1 <!-- 啟動元件掃描,排除@Controller元件,該元件由SpringMVC配置檔案掃描 --> 2 <context:component-scan base-package="com.cl.user.serviceImpl"/>
ApplicationContent-dubbo.xml dubbo服務的配置
1 <!-- 提供方應用資訊,用於計算依賴關係 --> 2 <dubbo:application name="hehe_provider" /> 3 <!-- 使用zookeeper註冊中心暴露服務地址 埠是zookeeper 中配置的2181--> 4 <dubbo:registry address="zookeeper://127.0.0.1:2181"/> 5 <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> --> 6 <!-- 用dubbo協議在20880埠暴露服務 --> 7 <dubbo:protocol name="dubbo" port="20880" /> 8 <!-- 具體的實現bean --> 9 <bean id="userService" class="com.cl.user.serviceImpl.UserServiceImpl" /> 10 <!-- 宣告需要暴露的服務介面 --> 11 <dubbo:service interface="com.cl.user.servicei.UserService" ref="userService" />
主意:有可能你的配置檔案中不識別 <dubbo:> 去網上找解決的辦法
到這裡我們的 “提供者” 即 服務 已經開發完了,那麼如何啟動服務呢? 在專案1中有個start.java
1 package com.test; 2 3 import org.apache.log4j.PropertyConfigurator; 4 5 public class start { 6 static{ 7 PropertyConfigurator.configure("src/main/resources/log4j.properties"); 8 } 9 public static void main(String[] args) { 10 11 com.alibaba.dubbo.container.Main.main(args); 12 } 13 }
主意裡面有main方法,可以直接執行啟動了。別急!!! 之前還有個問題就是為什 ApplicationContent-dubbo.xml 和 ApplicationContent.xml 這兩個配置檔案 必須要放到 /MATE-INF/spring/下面
因為 com.alibaba.dubbo.container.Main.main(args) 預設就會去載入 /MATE-INF/spring/ 下的配置檔案
我們來看一下原始碼
看完原始碼 這下明白為什麼了吧!!!!!!!!!!!!!!!!! 啟動服務後 我們在 dubbo-admin中就能看到我們剛才開發的的 “提供者” 192.168.56.1 是本地區域網 地址 這是 “提供者” 此時還沒有“消費者” 接下來我們就要開發 “消費者” test-web-consumer UserController.java@Controller public class UserController { @Resource(name="userService") private UserService userService; @RequestMapping("/hello/test/world") public void sayHello(){ System.out.println(userService.sayHello()+"**************************"); } }
ApplicationContext-mvc.xml 都是springmvc的配置 如下不解釋了
<mvc:annotation-driven/> <mvc:default-servlet-handler/> <context:component-scan base-package="com" /> <!-- 對靜態資原始檔的訪問 restful--> <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/lib/**" location="/lib/" /> <mvc:resources mapping="/plugins/**" location="/plugins/" /> <mvc:resources mapping="/uploadFiles/**" location="/uploadFiles/" /> <mvc:resources mapping="/WEB-INF/html/**" location="/WEB-INF/html/" /> <!-- 配置SpringMVC的檢視解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/html"/> <property name="suffix" value=".jsp"/> </bean> <!-- 上傳攔截,如最大上傳值及最小上傳值 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" > <property name="maxUploadSize"> <value>104857600</value> </property> <property name="maxInMemorySize"> <value>4096</value> </property> <property name="defaultEncoding"> <value>utf-8</value> </property> </bean>
ApplicationContext-dubbo.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方一樣 --> <dubbo:application name="hehe_consumer" /> <!-- 使用zookeeper註冊中心暴露服務地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <!-- 組播註冊 --> <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> --> <!-- 生成遠端服務代理,可以像使用本地bean一樣使用userService --> <dubbo:reference id="userService" interface="com.cl.user.servicei.UserService" /> </beans>
開發完消費者後 ,啟動消費者,可以在管控臺看到
完了!! Dubbo更多詳細的東西還去官網的使用者手冊尋找吧!! http://dubbo.io/User+Guide-zh.htm http://dubbo.io/ 使用者手冊說的挺詳細的!這裡僅供參考! 最後 ,在開發的時候為了方便,我們可以使用組播註冊!
<!-- 組播註冊 --> <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->