天天看點

ssm改造為dubbo項目

為什麼要用dubbo?

先貼上官網:https://github.com/apache/incubator-dubbo。

一般 nginx+tomcat

         | ----> Controller1--------->service1

請求----->nginx  |

         |----->Controller2--------->service2

請求進了Controller 就隻有一條路可以走了

使用dubbo後

              | ------->service1

請求------>Controller---->   |

              |---------->service2

簡單的說 也就是 一個Contoller 我可以部署多個 service   。

一般的mvc項目 包含 Controller、Service、ServiceImpl、dao三層

使用doubbo我們可以把項目拆分:

Controller 作為 “消費着” 一個項目

ServiceImpl +dao 作為 “提供者” 一個項目

Servicei “接口” 可以作為一個項目

本項目我接手的時候由兩個項目構成,一個使用者端,一個管理端。經過各種重構後還是不太滿意,各種服務複用性不好(同一個接口得兩邊都要寫,修改一個服務得修改兩次),目前初步構想用dubbo 來重構,service集中起來作為服務提供者,兩個web 項目作為兩個消費者。

準備工作

1、安裝zookeeper

2、部署dubbo-amdin

去官網下載下傳dubbo,解壓得到dubbo-admin,maven編譯。

出現錯誤:Missing artifact com.alibaba:dubbo:jar:2.8.4 dubbo,

去maven網上上并沒有發現2.8.4

ssm改造為dubbo項目

将版本替換為2.6.2,打包釋出

ssm改造為dubbo項目

登入時,admin /guest一直登入不上。回過頭來看配置檔案、無語。

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

準備工作到這兒就完成了。

建立maven項目

1、首先建立4個maven項目,其中xtel為pom項目,api為jar項目,server、web為war項目

ssm改造為dubbo項目

xtel-api主要寫實體類和定義接口,maven install後會在本地生成jar包,在xtel-server,xtel-web中引用

注意:實體類一定要實作序列化。

ssm改造為dubbo項目

xtel-server

 pom檔案

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.cdxt</groupId>
		<artifactId>xtel</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>xtel-server</artifactId>
	<name>xtel-server</name>
	<packaging>war</packaging>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
               <!--依賴引用-->
		<dependency>
			<groupId>com.cdxt</groupId>
			<artifactId>xtel-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<!--mybatis 資料通路層 start -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.0</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.20</version>
		</dependency>

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.0</version>
		</dependency>

		<!-- spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.2.0.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>com.dyuproject.protostuff</groupId>
			<artifactId>protostuff-runtime</artifactId>
			<version>1.0.8</version>
		</dependency>
		<!--mybatis 資料通路層 end -->

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
			</plugin>
		</plugins>
	</build>


</project>
      

 dubbo生産者配置

<?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="dubbo-server" />


	<dubbo:registry address="zookeeper://localhost:2181" />
	<!-- 用dubbo協定在20880端口暴露服務 -->
	<dubbo:protocol name="dubbo" port="20880" />
	<!--使用 dubbo 協定實作定義好的 api.PermissionService 接口 -->
	<!--具體實作該接口的 bean 
	<dubbo:service interface="com.cdxt.xtel.api.group.GroupManageService"
		ref="groupManageService" protocol="dubbo" />-->
        <!-- 使用注解方式暴露 -->
     <dubbo:annotation package="com.cdxt.xtel.server.impl"/>
</beans>
      

 orm層配置

<!--配置整合mybatis過程 -->

	<!--1、配置資料庫相關參數 -->
	<context:property-placeholder location="classpath:jdbc.properties"
		ignore-unresolvable="true" />

	<!-- 阿裡 druid資料庫連接配接池 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<!-- 資料庫基本資訊配置 -->
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<!--<property name="passwordCallback" ref="dbPasswordCallback"/> -->
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="filters" value="${jdbc.filters}" />
		<!-- 最大并發連接配接數 -->
		<property name="maxActive" value="${jdbc.maxActive}" />
		<!-- 初始化連接配接數量 -->
		<property name="initialSize" value="${jdbc.initialSize}" />
		<!-- 配置擷取連接配接等待逾時的時間 -->
		<property name="maxWait" value="${jdbc.maxWait}" />
		<!-- 最小空閑連接配接數 -->
		<property name="minIdle" value="${jdbc.minIdle}" />
		<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接配接,機關是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
		<!-- 配置一個連接配接在池中最小生存的時間,機關是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
		<property name="validationQuery" value="${jdbc.validationQuery}" />
		<property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
		<property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
		<property name="testOnReturn" value="${jdbc.testOnReturn}" />
		<property name="maxOpenPreparedStatements" value="${jdbc.maxOpenPreparedStatements}" />
		<!-- 打開removeAbandoned功能 -->
		<property name="removeAbandoned" value="${jdbc.removeAbandoned}" />
		<!-- 1800秒,也就是30分鐘 -->
		<property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
		<!-- 關閉abanded連接配接時輸出錯誤日志 -->
		<property name="logAbandoned" value="${jdbc.logAbandoned}" />
	</bean>

	<!--mapper解析 -->
	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"
		p:configLocation="classpath:mybatis-config.xml" p:dataSource-ref="dataSource"
		p:mapperLocations="classpath:com/cdxt/xtel/server/mapper/**/*Mapper.xml">
		<property name="typeAliasesPackage"
		value="com.cdxt.xtel.pojo.group,com.cdxt.xtel.pojo.lesson,com.cdxt.xtel.pojo.sys" />
	</bean>

	<!-- sqlSessionFactory -->

	<!-- 聲明接口 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
		p:sqlSessionFactoryBeanName="sqlSessionFactoryBean">
		<property name="basePackage"
			value="com.cdxt.xtel.server.mapper.sys,
			com.cdxt.xtel.server.mapper.group,com.cdxt.xtel.server.mapper.lesson" />

	</bean>
</beans>
      

 spring配置

<!-- 自動掃描dao和service包(自動注入) -->
	<context:component-scan base-package="com.cdxt.xtel.server.*" />
	
    <!--配置事務管理器(mybatis采用的是JDBC的事務管理器)-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--配置基于注解的聲明式事務,預設使用注解來管理事務行為-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
      

 service層代碼

ssm改造為dubbo項目

xtel-web

dubbo消費者配置

<?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="dubbo-web"/>
    <!--向 zookeeper 訂閱 provider 的位址,由 zookeeper 定時推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
     <!-- 使用注解方式暴露 -->
    <dubbo:annotation package="com.cdxt.xtel.web"/>
   
</bean
      

controller層

ssm改造為dubbo項目

啟動server 後我們就可以通過dubbo-admin觀察到服務已經完成了注冊

ssm改造為dubbo項目