1. 程式人生 > >SSH專案實戰OA-引用dubbo服務

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-serviceOA-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