1. 程式人生 > >maven搭建ssm分模組框架+dubbo (myeclipse版) (三)

maven搭建ssm分模組框架+dubbo (myeclipse版) (三)

前面已經把ssm的框架搭好了,在第二篇的地址可以下載到原始碼,部落格中也有搭建ssm相關的教程地址,相信大家可以搭建起來的

接下來就把dubbo引入進去了

關於dubbo的一些概念性的東西 請大家自行百度 或google一下吧

官方的地址是 dubbo.io

我這邊使用的是官方推薦的zookeeper來 排程dubbo服務的 zookeeper和dubbo一樣是分散式模式的
有四種註冊中心模式
這裡寫圖片描述

# 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. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=D:\\zookeeper-3.4.5\\data dataLogDir=D:\\zookeeper-3.4
.5\\log # the port at which the clients will connect clientPort=2181

然後就是 pom.xml引入的jar包

        <!-- dubbo start -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version
>
<exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>netty</artifactId> <groupId>org.jboss.netty</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> </dependency> <!-- dubbo end -->

jar包引入之後,就是服務消費者 和 提供者檔案配置了,我之前 搭好的ssm框架中 service 是用來提供 也就是用來暴露服務的那層
而web 是用來消費 也就是引用服務的那層
web 和 service 都在pom中引用了interface層,當dubbo使用起來之後,web層就只需要Interface層的jar包 就可以呼叫service 提供的服務了,也算是達到了解耦 ,看起來web層跟service是沒有任何的聯絡

interface層 只是介面

public interface DubboDao {
    public void dubboTest();
}

service層 服務提供者配置檔案dubbo-provider.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.xsd  
            http://code.alibabatech.com/schema/dubbo  
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
                <!-- 提供方應用資訊,用於計算依賴關係  -->
    <dubbo:application name="ssmDemo-service" />
    <!-- 使用zookeeper註冊中心暴露服務地址   --> 
    <dubbo:registry address="zookeeper://localhost:2181"/>  
   <!-- 用dubbo協議在20880埠暴露服務 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- dubbo釋出服務  配置資訊表 -->
    <dubbo:service interface="cn.com.test.dao.DubboDao" ref="DubboService"/>
            </beans>

對於這個埠,是使用zookeeper預設的2181埠

<dubbo:registry address="zookeeper://localhost:2181"/>

dubbo的埠也是使用預設的

<dubbo:protocol name="dubbo" port="20880" />

服務的暴露,interface的值是interface層介面的路徑,ref的值則是service層實現 @Service() 註解設定的名稱

<dubbo:service interface="cn.com.test.dao.DubboDao" ref="DubboService"/>

=========================================

DubboServiceImpl.java

@Service("DubboService")
public class DubboServiceImpl implements DubboDao{

    @Override
    public void dubboTest() {
        System.out.println("web層引用service服務成功");
    }

}

service層配置好之後,我們要怎麼讓不是web工程的service工程讀取配置檔案呢,這裡是直接用了一個main方法來載入這些配置檔案
main.java

public class TestMain {

    public static void main(String[] args){
        String[] xmls=new String[]{"classpath:spring-mybatis.xml","classpath:dubbo-provider.xml"};
        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext(xmls);
          context.start();
            try {
                System.in.read();
            } catch (IOException e) {
                e.printStackTrace();
            } // 按任意鍵退出
    }
}

web層 服務消費者配置dubbo-consumer.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.xsd  
            http://code.alibabatech.com/schema/dubbo  
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
                            <!-- 提供方應用資訊,用於計算依賴關係  -->
    <dubbo:application name="ssmDemo-web" />
    <!-- 使用zookeeper註冊中心暴露服務地址   --> 
    <dubbo:registry address="zookeeper://localhost:2181" /> 
        <!-- 引用service-authority的遠端服務   介面鑑權服務 -->
    <dubbo:reference id="DubboDao" interface="cn.com.test.dao.DubboDao" check="false" />
            </beans>

對於 id的名稱沒有特定的要求,可以跟介面的名稱一樣,interface的值也就是介面的路徑,check=false是在工程啟動的時候不會去檢查 對應的服務是否已經註冊到註冊中心,不會報該服務沒有被提供的異常錯誤

    <dubbo:reference id="DubboDao" interface="cn.com.test.dao.DubboDao" check="false" />

之後要讓容器載入dubbo-consumer.xml檔案,我是放在web.xml中,大家也可以考慮把它在applicationContext.xml中使用Import resource引入進去。
web.xml

    <!-- Spring MVC servlet -->  
    <servlet>  
        <servlet-name>SpringMVC</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:spring-mvc.xml,classpath:dubbo-consumer.xml</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup>  
        <async-supported>true</async-supported>  
    </servlet>  

PS:之前提供的ssm框架 web層的pom中忘記引入interface層了,這裡補上

        <dependency>
       <groupId>cn.com.test</groupId>
      <artifactId>ssmDemo-interface</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>

接下來要做的就是先將zookeeper跑起來,在zookeeper的目錄bin下,啟動zkServer.cmd
然後將service的main方法跑起來
然後把web層加入到tomcat 跑起來

最後訪問頁面 localhost:8080/test/dubbo

TestMain列印的資訊
這裡寫圖片描述

web層controller列印資訊
這裡寫圖片描述

zookeeper的日誌,我是把服務停止,但是可以看出之前服務是成功註冊到zookeeper上了
這裡寫圖片描述

還有一個小問題
執行的時候可能會遇到解析不了XML檔案的錯誤SAXException:

在maven的本地倉庫下找到maven->com->alibaba->dubbo->2.5.3->dubbo-2.5.3.jar (具體的看自己的本地倉庫) 解壓它獲得dubbo.xsd檔案

然後開啟Eclipse:1. Window->Preferences->XML->XML Catalog->User Specified Entries視窗中,選擇Add 按紐
這裡寫圖片描述

順便再說一下,下載的ssm框架 使用的話需要 clean install一下