1. 程式人生 > >Maven多模組+dubbo+zookeeper分散式架構搭建SSM專案

Maven多模組+dubbo+zookeeper分散式架構搭建SSM專案

Maven多模組的構建:

一、總體結構預覽

|----parent模組

    |-----manage聚合工程模組

    |       |------pojo

    |       |------dao

    |       |------service介面層

    |       |------service實現層

    |-----common公共元件

    |-----web表現層

Parent父類模組:集中統一管理專案中需要jar包的版本號,打包方式pom;

Manage聚合工程模組:繼承parent模組,集中管理pojo、dao、serivice各層元件,manage模組打包方式為pom包;

pojo繼承manage模組,存放實體類,打包為jar;

dao繼承manage模組,負責與資料庫互動,打包為jar;

service介面繼承manager模組,提供服務模組的抽象介面,為暴露對外訪問介面,打包為jar;

service實現層繼承manage模組,用來實現介面,實現業務邏輯,打包為war;

common公共元件模組:繼承parent模組,管理公共元件,如log4j等,打包為jar;

web表現層直接繼承父類,也為控制器層,打包為war包,通過網路通訊與servic介面連結,實現遠端訪問;下面開始丟擲實戰程式碼演示。

二,業務程式碼的具體實現,本專案搭建為SSM框架:

    (1).parent

模組中jar包管理

<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

 <modelVersion>4.0.0</modelVersion>

  <groupId>com.ssm</groupId>

 <artifactId>ssm-parent</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>pom</packaging>

       <!-- 1.管理jar包的版本 -->

       <properties>

                <--這裡放入jar包版本,維護室只需要更新該這裡的jar包版本,由於繼承關係,子類模組直接更新-->

               <zookeeper.version>3.4.7</zookeeper.version>

        </properties>

        <!-- 2.新增加jar包 -->

        <dependencyManagement>

               <dependencies>

                       <dependence>

這裡放入依賴檔案的座標,版本用el表示式即可

                        <dependence>

               </dependencies>

        </dependencyManagement>

        <build>

               <finalName>${project.artifactId}</finalName>

                <!-- 配置外掛 -->

    <plugins>

       <plugin>

           <groupId>org.apache.maven.plugins</groupId>

                       <artifactId>maven-compiler-plugin</artifactId>

                       <version>3.1</version>

                       <configuration>

                               <!-- 配置jdk的版本 -->

                               <source>1.8</source>

                               <target>1.8</target>

                               <encoding>UTF-8</encoding>

                       </configuration>

       </plugin>

       <plugin>

           <groupId>org.apache.tomcat.maven</groupId>

                  <artifactId>tomcat7-maven-plugin</artifactId>

                       <version>2.2</version>

                       <configuration>

                               <port>8080</port>

                               <uriEncoding>UTF-8</uriEncoding>

                               <server>tomcat7</server>

                       </configuration>

       </plugin>

    </plugins>

        </build>

</project>

(2).common公共元件模組:將需要的jar包從父類依賴進自己的pom.xml中

<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

 <modelVersion>4.0.0</modelVersion>

  <parent>

    <groupId>com.ssm</groupId>

   <artifactId>ssm-parent</artifactId>

    <version>0.0.1-SNAPSHOT</version>

  </parent>

  <groupId>com.ssm</groupId>

 <artifactId>ssm-common</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <dependencies>

        <denpendence>

這裡寫入依賴的檔案jar包座標

        <dependence>  

  </dependencies>

</project>

(3).manage模組,這個時專案整體業務邏輯的核心點,建立的manage為聚合工程,在manage聚合工程中建立model模組,分別為pojo,dao,service,一級serviceInterface,

模組建完後會在父類工成manage顯示如下:

  <modules>

        <module>ssm-dao</module>

        <module>ssm-service</module>

        <module>ssm-pojo</module>

        <module>ssm-interface</module>

  </modules>

當服務叢集規模進一步擴大,帶動IT治理結構進一步升級,需要實現動態部署,進行流動計算,現有分散式服務架構不會帶來阻力:

 <!-- 新增依賴,依賴common元件 -->

  <dependencies>

    <dependency>

       <groupId>com.ssm</groupId>

      <artifactId>ssm-common</artifactId>

       <version>0.0.1-SNAPSHOT</version>

    </dependency>

  </dependencies>

  <!-- 新增編譯外掛 -->

  <build>

     <plugins>

         <!-- tomcat外掛 -->

         <plugin>

               <groupId>org.apache.tomcat.maven</groupId>

                               <artifactId>tomcat7-maven-plugin</artifactId>

                               <version>2.2</version>

                               <configuration>

                                      <port>8080</port>

                                      <path>/</path>

                               </configuration>

         </plugin>

         <!-- jdk外掛 -->

         <plugin>

             <groupId>org.apache.maven.plugins</groupId>

                        <artifactId>maven-compiler-plugin</artifactId>

                         <version>3.1</version>

                         <configuration>

                                      <!-- 配置jdk的版本 -->

                                      <source>1.8</source>

                                      <target>1.8</target>

                                      <encoding>UTF-8</encoding>

                         </configuration>

         </plugin>

     </plugins>

  </build>

這裡不在贅述manage下面的子模組的建立,只介紹下最重要的service,在service層裡面需要整合spring和mybatis框架,所以這裡搭建框架的步驟也不再敘述,先看下結構:


直接上配置檔案:其中有dubbo相關配置檔案,這裡先寫進去,一會慢慢介紹

<!-- 1.配置資料庫連線池 -->

        <!-- 載入配置檔案 -->

        <context:property-placeholderlocation="classpath:properties/db.properties" />

        <!-- 資料庫連線池 -->

        <bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"

               destroy-method="close">

               <property name="url"value="${jdbc.url}" />

               <propertyname="username" value="${jdbc.username}" />

               <propertyname="password" value="${jdbc.password}" />

               <propertyname="driverClassName" value="${jdbc.driver}" />

               <propertyname="maxActive" value="10" />

               <propertyname="minIdle" value="5" />

        </bean>

        <!-- 2.配置SqlSessionFactory -->

        <!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的-->

        <!-- 事務管理器 -->

        <beanid="transactionManager"

               class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

               <!--資料來源 -->

               <propertyname="dataSource" ref="dataSource" />

        </bean>

        <!--通知 -->

        <tx:adviceid="txAdvice" transaction-manager="transactionManager">

               <tx:attributes>

                       <!--傳播行為 -->

                       <tx:methodname="save*" propagation="REQUIRED" />

                       <tx:methodname="insert*" propagation="REQUIRED" />

                       <tx:methodname="add*" propagation="REQUIRED" />

                       <tx:methodname="create*" propagation="REQUIRED" />

                       <tx:methodname="delete*" propagation="REQUIRED" />

                       <tx:methodname="update*" propagation="REQUIRED" />

                       <tx:methodname="find*" propagation="SUPPORTS"read-only="true" />

                       <tx:methodname="select*" propagation="SUPPORTS"read-only="true" />

                       <tx:methodname="get*" propagation="SUPPORTS"read-only="true" />

               </tx:attributes>

        </tx:advice>

        <!--切面 -->

        <aop:config>

               <aop:advisoradvice-ref="txAdvice"

                       pointcut="execution(*com.ssm.service.*.*(..))" />

        </aop:config>


<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 資料庫連線池 --><property name="dataSource"ref="dataSource" /><!-- 載入mybatis的全域性配置檔案 --><property name="configLocation"value="classpath:mybatis/SqlMapConfig.xml" /></bean><!--3.Mapper對映檔案的包掃描器 --><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage" value="com.ssm.dao" /></bean>

        <!-- 配置包掃描器,掃描所有帶@Service註解的類 -->

        <context:component-scanbase-package="com.ssm.service"/>

        <!-- service層釋出dubbo服務 -->

        <!-- 提供方應用資訊,用於計算依賴關係 -->

        <dubbo:applicationname="ssm-manager" />

        <!-- 註冊中心的地址 -->

        <dubbo:registryprotocol="zookeeper" address="192.168.40.129:2181" />

        <!-- 用dubbo協議在20880埠暴露服務 -->

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

        <!-- 宣告需要暴露的服務介面,interface為介面,ref為實現類 -->

        <dubbo:serviceinterface="com.ssm.inter.UserServiceInter"ref="userService" timeout="300000"/>

在service層需要提供對外發布的介面,來註冊至zookeeper註冊中心,來供web表現層來呼叫,這裡需要注意的是:dubbo:service interface="提供的時服務層的介面"ref="介面的實現類"

(4).web層:控制器層,這裡使用springmvc:先看結構圖:


其實這裡就是一個springmvc框架而已,在這裡說明下spring於springmvc的區別:spring和springmvc時喲個父子容器,springmvc可以訪問spring容器,但是反過來不成立,或許有人開始質疑,

為什麼不用springmvc直接代替spring容器呢?事實上代替不了,spring框架有著天然的可融合性,與其他的框架可以方便整合起來。所以還是不同的,各司其職。

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop"

   xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

   xmlns:mvc="http://www.springframework.org/schema/mvc"

   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://code.alibabatech.com/schema/dubbo

       http://code.alibabatech.com/schema/dubbo/dubbo.xsd

       http://www.springframework.org/schema/mvc 

       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">

  <!-- 掃描包路徑:多個包使用逗號隔開 -->

  <context:component-scanbase-package="com.ssm.controller"></context:component-scan>

  <!-- 配置mvc的註解驅動 -->

  <mvc:annotation-driven/>

  <!-- 靜態資源不被攔截 -->

  <mvc:default-servlet-handler/>

  <!-- 對映器作用:請求的URL和Bean名字對映 -->     

  <beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

  <!-- 介面卡作用:鑑別專案Bean可以作為SpringWeb MVC中的處理器-->

  <beanclass="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

  <!-- 檢視解析器 -->

  <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

    <property name="viewClass"value="org.springframework.web.servlet.view.JstlView"/> 

    <property name="prefix"value="/"/> 

    <property name="suffix"value=".jsp"/> 

  </bean>

  <!-- 檔案解析器 -->

   <bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 

        <propertyname="defaultEncoding" value="UTF-8"/> 

        <!-- 指定所上傳檔案的總大小不能超過200KB。注意maxUploadSize屬性的限制不是針對單個檔案,而是所有檔案的容量之和 --> 

        <propertyname="maxUploadSize" value="200000"/> 

    </bean>

  <!-- json資料型別轉換 -->

  <beanid="mappingJackson2HttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">   

            <propertyname="supportedMediaTypes">   

                <list>   

                   <value>text/html;charset=UTF-8</value>   

                   <value>text/json;charset=UTF-8</value>   

                    <value>application/json;charset=UTF-8</value>   

                </list>   

            </property>   

  </bean>  

  <!-- 註解介面卡:響應體 -->

  <bean  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">   

      <propertyname="messageConverters">   

          <list>   

              <refbean="mappingJackson2HttpMessageConverter" />   

          </list>   

      </property>   

  </bean>   

  <!-- 引用dubbo服務 -->

          <dubbo:applicationname="ssm-web" />

          <dubbo:registryprotocol="zookeeper" address="192.168.40.129:2181"/>  

          <dubbo:referenceinterface="com.ssm.inter.UserServiceInter"id="userServiceInter"/>

 </beans>

這裡dubbo為引用服務的介面,需要接入zookeeper註冊中心的地址來通過和zookeeper註冊中西通訊,來間接訪問遠端的服務埠,進行資料的請求和響應。

使用dubbo為中間層不僅專案維護起來帶來便捷,使得各模組的功能更加清晰。由於分散式系統中每個伺服器中部署的程式碼只負責一個功能,使用dubbo有如下好處:

1.監控中心宕掉不影響使用,只是丟失部分取樣資料

2.資料庫宕掉後,註冊中心仍能通過快取提供服務列表查詢,但不能註冊新服務

3.註冊中心對等叢集,任意一臺宕掉後,將自動切換到另一臺

4.註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地快取通訊

5.服務提供者無狀態,任意一臺宕掉後,不影響使用

6.服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復

7.當服務叢集規模進一步擴大,帶動IT治理結構進一步升級,需要實現動態部署,進行流動計算,現有分散式服務架構不會帶來阻力。

相關推薦

Maven模組+dubbo+zookeeper分散式架構搭建SSM專案

Maven多模組的構建: 一、總體結構預覽 |----parent模組     |-----manage聚合工程模組     |       |------pojo類     |       |------dao層     |       |------service介面層

springboot + dubbo + zookeeper 註冊中心 + maven模組專案框架搭建具體操作

1. 專案搭建前瞭解: Maven多模組專案可以解決專案中出現多個相同的jar包和service介面以及實體類物件的問題,可以將相同的提取成一個專案來維護管理,然後其他需要用到則只要引用jar包即可使用。 2. 將springboot + dubbo + zookeeper專案進行拆分: 生

Maven模組Dubbo分散式服務框架,SpringMVC,前後端分離專案,基礎搭建搭建過程出現的問題

1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apac

springboot的maven模組專案架構微服務搭建--跳過springmvc單一專案直接構建模組並衍化為微服務專案

  總想對微服務架構做一個小小的總結,不知如何下手,最近覺得還是從搭建微服務的過程來入手,對於springboot的maven專案從構建多模組架構進而衍化為常用的微服務架構來做個記錄吧。   首先,建立多個springboot專案,專案結構如圖:       裁剪後如右側   建立完成後,先解釋一下:s

springboot的maven模組專案架構微服務搭建——依賴方式的模組演化為微服務專案

在上一篇依賴方式多模組的基礎上對專案進行改造。主要改造user-service專案,service要配置mapper。mybatis及資料庫相關的東西,後面的介面消費方user就不再需要了 注意:以下程式碼是在不同場所的機器上寫的,資料庫什麼的會有不同,結構也會有不同,最終的程式碼會以其中一個傳遞到本人gi

在windows環境搭建dubbo+zookeeper分散式服務架構

Dubbo背景和簡介 Dubbo開始於電商系統,因此在這裡先從電商系統的演變講起。 1.單一應用框架(ORM) 當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程

使用maven模組構建dubbo第一個分散式HelloWorld

至於為什麼要用maven多模組構建專案,和dubbo是做什麼的就不多說了,直接開始。 首先建立一個maven專案作為root模組 命名為mydubbo,並刪除其中的src目錄(不需要) 除外我們需要Spring,zookeeper的依賴 mydubbo->pom.x

Maven實戰》讀書筆記--(1)使用intellij idea搭建並配置maven模組專案

本文使用intellij idea搭建Maven3多模組專案,並進行配置相關配置,以實現專案的構建打包。 專案結構 multi-module-project是我們的專案名稱,其中包含多個模組: mmp-dal模組:資料訪問層,提供對原始資料(主要指資料庫)的操作

Struts2+Spring+Hibernate整合開發(Maven模組搭建

Struts2+Spring+Hibernate整合開發(Maven多模組搭建) 0.專案結構 Struts2:web層 Spring:物件的容器 Hibernate:資料庫持久化操作   1.父模組匯入和管理所有需要的jar包 <?xml v

Eclipse搭建基於Springboot的Maven模組工程

1,寫在前面的話 1.1,我想說點啥          公司提供介面服務的專案要進行重構,主旨是構建基於Springboot的Maven多模組聚合工程.因之前接觸Springboot較少,於是就在網上查閱資料,查了好多部落格發現大部分都是寫用idea構建的,部分用Ec

Springboot整合dubbo構建maven模組專案(四)

在中,我們配置了一個dubbo專案,包含三個模組springboot-dubbo-api、springboot-dubbo-server和springboot-dubbo-client,並且在springboot-dubbo-server和springboot-dubbo-c

ssm+maven模組專案搭建

不多說了,spring+springMVC+mybatis+maven的多模組web專案(使用的是idea)1,使用idea建立一個多模組的maven專案2,專案的maven和Tomcat配置這裡就不多說了。專案結構先看一下:3,pom.xml檔案,新增自己需要的吧,就是一些

eclipse上搭建maven模組Java Web專案

1、模組化需求及專案模組說明 手頭上有個已上線的系統,但因老闆的特殊要求,系統需要不斷的修改。還有就是公司市場部不定期地在舉行一些微信活動,每一個活動都是週期性的,活動完了這個功能就要在系統中移除。 系統中就有三種模組:已經在系統中正常執行不需要再變更的模組

Maven模組專案搭建

專案大的時候一般都要分模組,或者引入第三方框架的時候,那麼我們該如何實際操作呢,知道以下幾點就可以完美搭建Maven分模組的專案 1.彙總所有模組的專案根目錄的pom.xml 檔案中的 <modules> </modules>中新增所有子模組專案的

Springboot整合dubbo構建maven模組專案(一)- 專案建立和pom.xml中jar包配置

       以前一直用Spring作為容器構建專案,但是看到Spring官網一直在推Springboot,最重要的是Springboot確實避免自己尋找多個jar包(大多數情況下,可能自己都不記得該引入哪些jar包)和jar包之間衝突的問題,同時省掉了在整合其他框架時候

搭建SpringBoot工程(Maven模組版)

一、搭建一個Maven 多模組專案 我們意思一下,假設我們構建的專案就這三個模組 springboot-front web層 springboot-service 業務層 springboot-dao 資料持久層 依賴關係如下: 依賴依賴springboot

dubbo+zookeeper 分散式專案搭建

一、簡介1.1 dubbo介紹Dubbo是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。1.2主要核心部件Remoting: 網路通訊框架,實現了 sync-over-async 和 r

Maven模組工程搭建

一、工程結構: 其中ds 系統中包含兩個模組,分別為ds-service和ds-admin 二、搭建如上工程結構步驟如下: 1、建立父專案ds,在Eclipse裡面New -> Maven Project;記得勾選Create a simple proj

搭建maven模組工程

搭建maven多模組工程 一、概要 作業系統:win7 變成語言:java web容器:tomcat IDE工具:STS(Spring Tool Suite) 專案管理工具:maven 搭建環境: 1、安裝jdk 一鍵式安裝,下一步下一步即可 安裝完畢配置環境變數:JA

分布式框架Maven Springmvc mybatis,Dubbo ZooKeeper,Redis,FastDFS,ActiveMQ

摘要: Jeesz目前包括以下模塊項目,後臺系統管理系統,RestFul獨立服務系統、Scheduler定時調度系統、內容管理(CMS)系統、在線辦公(OA)系統、我的待辦(Task服務)、我的收藏(Bookmark服務)。 後臺管理系統包括企業組織架構(用戶管理、機構管理、區域管理)