SSH專案實戰OA-引用dubbo服務
上文我們一起學習瞭如何釋出一個dubbo服務,本文我就來教大家如何在web工程中引用dubbo釋出的服務。
首先我們在web工程也需要新增dubbo的依賴,我們可以直接把OA-system-service工程下的關於dubbo的依賴部分拷貝過來,拷貝的內容如下:
<!-- dubbo相關 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <!-- 排除依賴 --> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency>
<!-- zookeeper的客戶端,你要連線zookeeper,需要把以下兩個jar包加進來 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency> |
拷貝後的OA-system-web工程的pom.xml檔案的內容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.QEcode</groupId>
<artifactId>OA-system</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>OA-system-web</artifactId>
<packaging>war</packaging>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- JSP相關 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
</dependency>
<dependency>
<groupId>com.QEcode</groupId>
<artifactId>OA-system-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- dubbo相關 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<!-- 排除依賴 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper的客戶端,你要連線zookeeper,需要把以下兩個jar包加進來 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
</dependency>
</dependencies>
</project>
下面我們需要在OA-system-web工程下的springmvc.xml檔案中引用dubbo服務,新增的內容如下。
<!-- 引用dubbo服務 --> <dubbo:application name="OA-system-web"/> <!-- 超時時間 --> <dubbo:consumer timeout="5000" /> <dubbo:registry protocol="zookeeper" address="${dubbo.address}"/> <dubbo:reference interface="com.QEcode.OA.service.UserService" id="userService" /> |
<dubbo:consumer timeout="5000" />表示在連線超過5秒後自動斷開連線,這是為了防止某個服務發生死迴圈一直連線,當然在實際中,5秒也是很長的時間了,不過我們有時候要debug,所以把連線時間調長一點.同時,要注意的是:
可以看到,service層的是ref,表示引用userServiceImpl bean,而web層的是id,表示將這個bean注入到spring容器中,那麼我們就可以在controller中使用該bean了.
同樣我們需要在resources目錄下新建一個resource.properties檔案,並配置dubbo地址
由於在applicationContext-web.xml中,我們沒有讓spring載入配置檔案,所以我們需要新增一下內容來讓spring載入配置檔案
<!-- 載入配置檔案 --> <context:property-placeholder location="classpath:resource/*.properties"/> |
引用dubbo服務之後,完整的applicationContext-web.xml檔案如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- 載入配置檔案 -->
<context:property-placeholder location="classpath:resource/*.properties"/>
<context:component-scan base-package="com.QEcode.OA.controller" />
<!-- 引用dubbo服務 -->
<dubbo:application name="OA-system-web"/>
<!-- 超時時間 -->
<dubbo:consumer timeout="5000" />
<dubbo:registry protocol="zookeeper" address="${dubbo.address}"/>
<dubbo:reference interface="com.QEcode.OA.service.UserService" id="userService" />
</beans>
服務呼叫測試
我們已經發布和引用了dubbo服務了,而且我們在之前的部落格中以及構建好服務了,不過要修改一下UserAction
現在可以測試一下dubbo服務是否好使.
首先要啟動搭建有Zookeeper服務的虛擬機器.
開啟終端,啟動Zookeeper服務
zkServer.sh start
我們還需要做件事情,就是配置防火牆,需要開放相關埠:2181,20880,當然,你也可以把防火牆關閉了.
現在,啟動OA-system-service和OA-system-web兩個工程的Tomcat
然後,在瀏覽器中輸入http://localhost:8081/OA-system-web/user/userAction_findById.action
可以看到能夠跳轉到success.jsp,接下來看看控制檯是否輸出了userService的地址
可以看到userService不為空,說明我們dubbo搭建成功
===============================================================================================
在寫部落格的時候,可能在專案中有一些問題沒有被發現,在我修改後,忘記寫到部落格上,所以我將這個專案上傳到github上,大家可以在github上獲取專案的程式碼
下面是github地址,大家Fork and Star
OA-Reconsitution