Spring4+Spring MVC+Mybatis+dubboX+Rest+rabbitMQ+zookeeper 實現註冊後消息推送 項目搭建

1.安裝zookeeper 並啓動

下載並解壓 zookeeper-3.4.11.tar.gz

1.複製zoo_sample.cfg  到 zoo.cfg 編輯

 

 

2.安裝rabbitmq  並啓動

 

 

3.項目構建

3.1.api 接口項目

3.2.服務端工程

3.3.消費端工程

4  dubbo-demo-api   

   4.1pom.xml  依賴

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
     
    
    <dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>dubbo</artifactId>
	    <version>2.8.4</version>
	    <exclusions>
	        <exclusion>
	            <artifactId>spring-expression</artifactId>
	            <groupId>org.springframework</groupId>
	        </exclusion>
	        <exclusion>
	            <artifactId>spring-beans</artifactId>
	            <groupId>org.springframework</groupId>
	        </exclusion>
	        <exclusion>
	            <artifactId>spring-aop</artifactId>
	            <groupId>org.springframework</groupId>
	        </exclusion>
	    </exclusions>
	</dependency>

    <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>4.2.4.RELEASE</version>
	</dependency>

    
    <dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jaxrs</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-client</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	<dependency>
	    <groupId>javax.validation</groupId>
	    <artifactId>validation-api</artifactId>
	    <version>1.0.0.GA</version>
	</dependency>
	
	<!-- 如果要使用json序列化 -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jackson-provider</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	<!-- 如果要使用xml序列化 -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jaxb-provider</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	<!-- 如果要使用netty server -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-netty</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	<!-- 如果要使用Sun HTTP server -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jdk-http</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	<!-- 如果要使用tomcat server -->
	<dependency>
	    <groupId>org.apache.tomcat.embed</groupId>
	    <artifactId>tomcat-embed-core</artifactId>
	    <version>8.0.11</version>
	</dependency>
	<dependency>
	    <groupId>org.apache.tomcat.embed</groupId>
	    <artifactId>tomcat-embed-logging-juli</artifactId>
	    <version>8.0.11</version>
	</dependency>
	
		
	<dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>fastjson</artifactId>
	    <version>1.2.5</version>
	</dependency>
	
	<dependency>
		<groupId>javax.ws.rs</groupId>
		<artifactId>javax.ws.rs-api</artifactId>
		<version>2.0</version>
	</dependency>

  </dependencies>
  <build>
    <finalName>dubbo-demo-api</finalName>
    <plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>2.3.2</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
	</plugins>
  </build>

4.2服務接口類

package com.service.soa.api.query;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;

@Path("query")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ContentType.APPLICATION_JSON_UTF_8 })
public interface QueryUserServiceApi {
	
	@POST
	@Path("test")
    public String test();
}


******************************************************************************

package com.service.soa.api.register;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;
import com.service.soa.bean.EmailRequestBean;
import com.service.soa.bean.EmailResponseBean;

@Path("register")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ContentType.APPLICATION_JSON_UTF_8 })
public interface RegisterServiceApi {
   
	/**
	 * 
	* @Title: queryOrderInfo  
	* @Description: TODO(註冊)  
	* @param @param emailRequestBean
	* @param @return    參數  
	* @return String    返回類型  
	* @throws
	 */
	@POST
	@Path("sendMessage")
	public EmailResponseBean sendMessage(EmailRequestBean emailRequestBean);
	
	@GET
	@Path("greeting")
    public String sayHello();
	
}

5 RabbitMqS 服務提供項目 相關 配置及類

 

5.1 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.java.rabbit</groupId>
  <artifactId>RabbitMqS</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>RabbitMqS Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <!-- 定義全局版本號 -->
  <properties>
  		<!-- maven編譯的時候默認使用的GBK編碼, 通過project.build.sourceEncoding屬性設置字符編碼,通知maven使用UTF-8編譯項目 -->
  		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<dubbox.version>2.8.4</dubbox.version>
		<mybatis.version>3.2.8</mybatis.version>
		<spring.version>4.3.2.RELEASE</spring.version>
		<mysql.driver.version>5.1.39</mysql.driver.version>
		<junit.version>4.12</junit.version>
		<zkclient.version>0.10</zkclient.version>
	    <curator-framework.version>4.0.1</curator-framework.version>
	    <fastjson.version>1.2.46</fastjson.version>
	    <log4j.version>1.2.17</log4j.version>
	    <slf4j-api.version>1.7.25</slf4j-api.version>
	    <commons-lang3.version>3.4</commons-lang3.version>
	    <netty-all.version>4.0.35.Final</netty-all.version>
	</properties>
  
   
  <dependencies>
     <!-- 單元測試 -->
	<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
		<groupId>com.service.api</groupId>
		<artifactId>dubbo-demo-api</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
    
    <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-test</artifactId>
	    <version>4.2.5.RELEASE</version>
	</dependency>
    
     <!-- 導入servlet支持包 -->
    <!-- <dependency>
    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>4.0.0-b01</version>
	</dependency> -->
    
	
	<!-- 導入日誌支持包 -->
<!-- 	<dependency>
	    <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
	    <version>1.2.17</version>
	</dependency> -->
	
	<!-- 日誌系統支持(slf4j-log4j12:鏈接slf4j-api和log4j中間的適配器。它實現了slf4j-apiz中StaticLoggerBinder接口,
			從而使得在編譯時綁定的是slf4j-log4j12的getSingleton()方法) -->
	<!-- <dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.21</version>
	</dependency> -->
	
  
  	<!-- spring4相關jar包導入 -->
	
	<!-- 提供在基礎IOC(控制反轉)功能上的擴展服務,此外還提供許多企業級服務的支持,有郵件服務、
			任務調度、JNDI定位,EJB集成、遠程訪問、緩存以及多種視圖層框架的支持。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring核心工具包,其它包依賴此包 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	<!-- spring對jdbc的簡單封閉包 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring用於支持web開發時所需的Spring框架的核心類,包括自動載入WebApplicationContext特性的類、
		 Struts與JSF集成類、文件上傳的支持類、Filter類和大量工具輔助類。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-web</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- 用於對spring AOP(面向切面)的支持jar包 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aop</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- 擴展包:spring context 的擴展支持,用於MVC方面-->
	<dependency>
    <groupId>org.springframework</groupId>
	    <artifactId>spring-context-support</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring bean管理包(包括配置文件的訪問和創建bean管理bean)是Spring IOC的基礎實現-->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring提供對事物的支持,事務的相關處理以及實現類就在這個jar包中 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-tx</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- 提供對AspectJ的支持,以便可以方便的將面向方面的功能集成進IDE中,比如Eclipse AJDT。
		 外部依賴。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aspects</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- springMvc4對json的支持 -->
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-annotations</artifactId>
	    <version>2.5.0</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-core</artifactId>
	    <version>2.5.0</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-databind</artifactId>
	    <version>2.5.0</version>
	</dependency>
	
	<!-- 這個jar 文件包含Spring MVC 框架相關的所有類。
			包括框架的Servlets,Web MVC框架,控制器和視圖支持。當然,如果你的應用使用了獨立的MVC 框架,則無需這個JAR 文件裏的任何類。
			外部依賴spring-web, (spring-support,Tiles,iText,POI)。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>${spring.version}</version>
	</dependency> 
	
	<!--Spring數據庫訪問中另外一大模塊就是ORM,ORM即對象/關係映射。
		Spring支持大多數ORM框架,比如Hibernate,JPA,JDO,TopLink和iBatis
		(Spring2支持iBatis2,現MyBatis3的Spring支持由MyBatis社區開發,並非Spring)。  -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-orm</artifactId>
	    <version>4.0.2.RELEASE</version>
	</dependency>

	<dependency>
		<groupId>org.springframework.security</groupId>
		<artifactId>spring-security-config</artifactId>
		<version>4.0.2.RELEASE</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework.security</groupId>
		<artifactId>spring-security-web</artifactId>
		<version>4.0.2.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.security</groupId>
		<artifactId>spring-security-core</artifactId>
		<version>4.0.2.RELEASE</version>
	</dependency>
 	<dependency>
  		<groupId>org.springframework</groupId> 
  		<artifactId>spring-test</artifactId> 
  		<version>4.1.6.RELEASE</version> 
  		<scope>test</scope> 
  	</dependency>
  	<!-- <dependency>
		<groupId>com.sun.mail</groupId>
		<artifactId>javax.mail</artifactId>
		<version>1.5.2</version>
	</dependency> -->
  	<dependency>
		<groupId>org.aspectj</groupId>
		<artifactId>aspectjweaver</artifactId>
		<version>1.8.7</version>
	</dependency>
  	<!-- <dependency>
		<groupId>org.apache.tomcat</groupId>
		<artifactId>tomcat-servlet-api</artifactId>
		<version>8.0.26</version>
		<scope>provided</scope>
	</dependency>	 -->
	<dependency>
		<groupId>org.apache.cxf</groupId>
		<artifactId>cxf-rt-frontend-jaxrs</artifactId>
		<version>3.1.2</version>
	</dependency>
	<dependency>
		<groupId>org.codehaus.jackson</groupId>
		<artifactId>jackson-jaxrs</artifactId>
		<version>1.9.2</version>
	</dependency>
	<dependency>
		<groupId>commons-net</groupId>
		<artifactId>commons-net</artifactId>
		<version>1.4.1</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.commons</groupId>
	    <artifactId>commons-lang3</artifactId>
	    <version>3.0</version>
	</dependency>
	
	 <!-- 導入servlet支持包 -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>3.0.1</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.1</version>
		<scope>provided</scope>
	</dependency>

    
    <!-- 導入jstl支持包 -->
    <dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>

	<!-- redis -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>

   
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.7.2.RELEASE</version>
    </dependency>
    
    
    <dependency>
	    <groupId>org.springframework.amqp</groupId>
	    <artifactId>spring-rabbit</artifactId>
	    <version>2.0.2.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>javax.mail</groupId>
		<artifactId>mail</artifactId>
		<version>1.4.7</version>
	</dependency>
	
	
	
	
	
	<!-- dubbo -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>dubbo</artifactId>
		<version>${dubbox.version}</version>
 		<exclusions>
			<exclusion>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aop</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework</groupId>
				<artifactId>spring-expression</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework</groupId>
				<artifactId>spring-core</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.springframework</groupId>
				<artifactId>spring-web</artifactId>
			</exclusion>
			<exclusion>
				<artifactId>slf4j-api</artifactId>
				<groupId>org.slf4j</groupId>
			</exclusion>
			<exclusion>
				<artifactId>commons-logging</artifactId>
				<groupId>commons-logging</groupId>
			</exclusion>
			<exclusion>
				<groupId>javax.servlet</groupId>
				<artifactId>javax.servlet-api</artifactId>
			</exclusion>
			<exclusion>
				<groupId>com.google.guava</groupId>
				<artifactId>guava</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.apache.httpcomponents</groupId>
				<artifactId>httpclient</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.apache.httpcomponents</groupId>
				<artifactId>httpcore</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.apache.curator</groupId>
				<artifactId>curator-framework</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.apache.curator</groupId>
				<artifactId>curator-client</artifactId>
			</exclusion>
			<exclusion>
				<groupId>commons-codec</groupId>
				<artifactId>commons-codec</artifactId>
			</exclusion>
			<exclusion>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	
	<dependency>
         <groupId>com.101tec</groupId>
         <artifactId>zkclient</artifactId>
         <version>${zkclient.version}</version>
     </dependency>
     <dependency>
         <groupId>org.apache.curator</groupId>
         <artifactId>curator-framework</artifactId>
         <version>${curator-framework.version}</version>
     </dependency>
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>${fastjson.version}</version>
     </dependency>
	 <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-all</artifactId>
         <version>${netty-all.version}</version>
     </dependency>
     
     
     <!-- rest支持 -->
     <dependency>
		<groupId>javax.ws.rs</groupId>
		<artifactId>javax.ws.rs-api</artifactId>
		<version>2.0</version>
	 </dependency>
     <dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jaxrs</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-client</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	<dependency>
	    <groupId>javax.validation</groupId>
	    <artifactId>validation-api</artifactId>
	    <version>1.0.0.GA</version>
	</dependency>
	
	
	
	<!-- 如果要使用json序列化 -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jackson-provider</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	<!-- 如果要使用xml序列化 -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jaxb-provider</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	
	
	<!-- 如果要使用netty server -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-netty</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	<!-- 如果要使用Sun HTTP server -->
	<dependency>
	    <groupId>org.jboss.resteasy</groupId>
	    <artifactId>resteasy-jdk-http</artifactId>
	    <version>3.0.7.Final</version>
	</dependency>
	
	<!-- 如果要使用tomcat server -->
<!-- 	<dependency>
	    <groupId>org.apache.tomcat.embed</groupId>
	    <artifactId>tomcat-embed-core</artifactId>
	    <version>8.5.27</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.tomcat.embed</groupId>
	    <artifactId>tomcat-embed-logging-juli</artifactId>
	    <version>8.0.11</version>
	</dependency> -->
	
	<!-- 如果要使用tomcat server -->
 		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-core</artifactId>
			<version>8.5.40</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-logging-juli</artifactId>
			<version>8.0.11</version>
		</dependency> 
	
	<!-- druid數據連接池 -->
	<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid</artifactId>
       <version>1.0.11</version>
    </dependency>
    
    <!-- Mybatis spring整合包 -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>1.3.0</version>
	</dependency>
	
	<!-- 添加Mybatis支持包 -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.4.1</version>
	</dependency>
	
	<!-- mySql驅動包 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.37</version>
	</dependency>
	
	<!-- shiro核心包 -->
	<dependency>
	    <groupId>org.apache.shiro</groupId>
	    <artifactId>shiro-core</artifactId>
	    <version>1.3.0</version>
	</dependency>
	
	<!-- spring shiro 整合包 -->
	<dependency>
	    <groupId>org.apache.shiro</groupId>
	    <artifactId>shiro-spring</artifactId>
	    <version>1.3.0</version>
	</dependency>
    
    <!-- shiro用於web開發所需的jar包 -->
    <dependency>
	    <groupId>org.apache.shiro</groupId>
	    <artifactId>shiro-web</artifactId>
	    <version>1.3.0</version>
	</dependency>
		
  </dependencies>
  <build>
    <finalName>RabbitMqS</finalName>
    <plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>2.3.2</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
	</plugins>
  </build>
</project>

5.2 application-context.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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
        ">
        <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
        <context:component-scan base-package="com.service.soa" />
        
	    <!-- 激活annotation功能 -->  
	   <!--  <context:annotation-config />   -->
	    
        <!-- 加載靜態資源 -->
        <mvc:default-servlet-handler/>
        <!-- 加載配置文件 -->
		<!-- <context:property-placeholder ignore-unresolvable="false" location="classpath:properties/config.properties"/>  -->
		<!-- 獲取配置文件 -->
		<bean id="propertyConfigurer"
			class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
			<property name="locations">
				<list>
					<value>classpath:properties/config.properties</value>
					<value>classpath:properties/dubbo.properties</value>
					<value>classpath:properties/spring-email.properties</value>
					<value>classpath:properties/dbconfig.properties</value>
				</list>
			</property>
		</bean>
	
		
		<!-- 引入其他xml配置文件 -->
		<!-- <import resource="classpath:xml/*.xml"/> -->
		<import resource="classpath:xml/application-Email.xml"/>
	    <import resource="classpath:xml/application-rabbitMq.xml"/> 
	    <import resource="classpath:xml/application-provider-dubbo.xml"/>
	    <import resource="classpath:xml/jdbc-Context.xml"/>
	    <import resource="classpath:xml/spring-dubbo-service-api.xml"/>
</beans>        

5.3application-Email.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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        ">

     <!--  -->   
<!--     <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${email.host}"/>
        <property name="username" value="${email.username}"/>
        <property name="password" value="${email.password}"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.timeout">25000</prop>
                如果是網易郵箱, mail.smtp.starttls.enable 設置爲 false  
              	<prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>  
            </props>
        </property>
    </bean> -->
     
     <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="smtp.qq.com"/>
        <property name="username" value="[email protected]"/>
        <property name="password" value="kmwptnlpeznjebaj"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.timeout">25000</prop>
                <!-- 如果是網易郵箱, mail.smtp.starttls.enable 設置爲 false   -->
              	<prop key="mail.smtp.starttls.enable">true</prop>
                <!-- <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> -->
               
            </props>
        </property>
    </bean> 


    <!--配置線程池-->
    <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="5" />
        <property name="maxPoolSize" value="20" />
        <property name="queueCapacity" value="10" />
        <property name="keepAliveSeconds" value="30000" />
    </bean>
    
        
</beans>        

5.4application-provider-dubbo.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調用暴露的服務相關配置信息 -->
	<dubbo:application name="${dubbo.provider.name}" owner="Starter" organization="dumz"/>
	<!-- dubbo zookeeper註冊地址  集羣可以配置多個地址 -->
	<dubbo:registry address="${dubbo.registry}" client="curator"/>
	
	<!-- dubbo服務端口 -->
    <!-- <dubbo:protocol name="dubbo" port="${dubbo.provider.port}"/> -->
    
    <!-- rest 服務端口 contextpath="services" -->
    <dubbo:protocol name="rest" port="${dubbo.provider.rest}" server="tomcat" accepts="20000" contextpath="services" 
    threads="500" extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/>
     		
</beans>

5.5application-rabbitMq.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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
        ">
        
		 
		 <!-- 配置連接 -->
		 <rabbit:connection-factory id="connectionFactory" host="${rabbit.host}" port="${rabbit.port}" 
		 username="${rabbit.name}" password="${rabbit.password}" virtual-host="${rabbit.virtualHost}" 
		 requested-heartbeat="${rabbit.requestedHeartbeat}"/>
		 
		 <!-- json格式轉換 -->
		 <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter"/>
		 
		<!-- 配置RabbitTemplate  用於發送消息和接收消息的模板 --> 
		<rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" exchange="myExchange" 
		routing-key="${rabbitEmail.routing-key}" message-converter="jsonMessageConverter"/>  
		
		<!-- 配置RabbitAdmin -->
		<rabbit:admin connection-factory="connectionFactory"/> 
		
		<rabbit:queue name="${rabbitEmail.queueName}"/>
		
		<!-- 
			交換機類型: 
				1.direct交換器(消息中的路由鍵與Binding中的綁定鍵一致)  
				2.Fanout交換器 (發送到交換器的每條消息都會被轉發到與該交換器綁定的所有隊列中)
				3.Topic交換器(通過模式匹配分配分配消息的路由鍵屬性)
			配置Topic類型的交換器 
		-->
		<rabbit:topic-exchange name="myExchange">
			<rabbit:bindings>
				<rabbit:binding queue="${rabbitEmail.queueName}" pattern="email.*"></rabbit:binding>
			</rabbit:bindings>
		</rabbit:topic-exchange>  
	
	   <!-- 業務處理監聽器類 -->
	   <bean id="fooMessageListener" class="com.service.soa.listener.FooMessageListener"></bean>
	   
	   <!-- 郵件處理監聽類 -->
	   <bean id="emailMessageListener" class="com.service.soa.listener.EmailMessageListener"></bean>
	   
	   <!-- 配置監聽器 -->	
	   <rabbit:listener-container connection-factory="connectionFactory">
	   		<rabbit:listener ref="emailMessageListener" queue-names="${rabbitEmail.queueName}"/>
	   		<!-- <rabbit:listener ref="fooMessageListener" queue-names="${rabbitEmail.queueName}"/> -->
	   </rabbit:listener-container>
	   
       	<!-- springMvc4 用於將對象轉換爲 JSON  -->  
	    <!-- <bean id="stringConverter"  
	        class="org.springframework.http.converter.StringHttpMessageConverter">  
	        <property name="supportedMediaTypes">  
	            <list>  
	                <value>text/plain;charset=UTF-8</value>  
	            </list>  
	        </property>  
	    </bean>  
	    <bean id="jsonConverter"  
	        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>  
	    <bean  
	        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
	        <property name="messageConverters">  
	            <list>  
	                <ref bean="stringConverter" />  
	                <ref bean="jsonConverter" />  
	            </list>  
	        </property>  
	    </bean>   -->
	        	
</beans>        

5.6jdbc-Context.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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:task="http://www.springframework.org/schema/task" 
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd">
        
        <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="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="driverClassName" value="${jdbc.driver}"/>
        	
        	<!-- 初始化連接數量、最小空閒連接數、最大併發連接數 -->
        	<property name="initialSize" value="${jdbc.initialSize}"/>
        	<property name="minIdle" value="${jdbc.minIdle}"/>
        	<property name="maxActive" value="${jdbc.maxActive}"/>
        	
        	<!-- 配置獲取連接等待超時的時間 -->
        	<property name="maxWait" value="${jdbc.maxWait}"/>
        	
        	<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->
			<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
         	<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
			<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
      		
      		<!--用來檢測連接是否有效的sql,要求是一個查詢語句。如果validationQuery爲null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用 -->
        	<property name="validationQuery" value="${jdbc.validationQuery}" />
        	<!-- 建議配置爲true,不影響性能,並且保證安全性。申請連接的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。 -->
		    <property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
		    <!-- 申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。 -->
		    <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
		    <!-- 歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能 -->
		    <property name="testOnReturn" value="${jdbc.testOnReturn}" />
        	<!-- 配置監控統計攔截的filters -->
      		<property name="filters" value="${jdbc.filters}" />
      		
        </bean>
        
        
        <!-- 
        	SqlSessionFactoryBean是一個工廠bean,它的作用就是解析配置(數據源、別名等)。
        -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        	<property name="dataSource" ref="dataSource" />
        	<!-- 自動掃描mappers.xml文件 -->
			<property name="mapperLocations" value="classpath:com/service/soa/dao/*.xml"/>
			<!-- mybatis配置文件(別名文件) -->
			<property name="configLocation" value="classpath:xml/mybatis-config.xml"/>
        </bean>
        
        
        			<!--  
			MapperFactoryBean 創建的代理類實現了 UserMapper 接口,並且注入到應用程序中。 
			因爲代理創建在運行時環境中(Runtime,譯者注) ,那麼指定的映射器必須是一個接口,而 不是一個具體的實現類。
			
			
			basePackage 屬性是讓你爲映射器接口文件設置基本的包路徑。 
			你可以使用分號或逗號 作爲分隔符設置多於一個的包路徑。
			每個映射器將會在指定的包路徑中遞歸地被搜索到。
			注 意 , 沒 有 必 要 去 指 定 SqlSessionFactory 或 SqlSessionTemplate , 
			因 爲 MapperScannerConfigurer 將會創建 MapperFactoryBean,之後自動裝配。
			但是,如果你使 用了一個 以上的 DataSource ,那 麼自動 裝配可 能會失效 。
			這種 情況下 ,你可 以使用 sqlSessionFactoryBeanName 或 sqlSessionTemplateBeanName 
			屬性來設置正確的 bean 名 稱來使用。這就是它如何來配置的,注意 bean 的名稱是必須的,而不是 bean 的引用,
			因 此,value 屬性在這裏替代通常的 ref:
			
		-->
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
			<property name="basePackage" value="com.service.soa.dao"/>
			<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
		</bean> 
        
        
        <!-- 
        		1.Platform TransactionManager(提交、回滾事務) 接口實現類 DataSourceTransactionManager
	    		2.Jdbc事物管器(DataSourceTransactionManager):
	  			配置事物管理(spring中的jdbc事物管理器)   保證數據的一致性
	  			實際上,DataSourceTransactionManager是通過調用Java.sql.Connection來管理事務,
	  			而後者是通過DataSource獲取到的。通過調用連接的commit()方法來提交事務,同樣,事務失敗則通過調用rollback()方法進行回滾。
	     -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
			<property name="dataSource" ref="dataSource" />
		</bean>	
		

		
	    <!-- 
	    	 	TransactionDefinition 事務定義信息(隔離、傳播、超時、只讀)
			        1.髒讀:一個事務讀取了另一個事務改寫但還未提交的數據,如果這些數據被回滾,則讀到的數據是無效的。
			        2.不可重複讀:在同一事務中,多次讀取同一數據返回的結果有所不同。
			        3.幻讀:一個事務讀取了幾行記錄後,另一個事務插入一些記錄,幻讀就發生了。再後來的查詢中,第一個事務就會發現有些原來沒有的記錄。
			        事務隔離級別:(五種)
				    1. DEFAULT-使用後端數據庫默認的隔離級別(Spring中的選擇項)
				    2.READ_UNCOMMITED-允許你讀取還未提交的改變了的數據。可能導致髒、幻、不可重複讀
				    3.READ_COMMITTED-允許在併發事務已經提交後讀取。可防止髒讀,但幻讀和不可重複讀仍可發生
				    4.REPEATABLE_READ-對相同字段的多次讀取是一致的,除非數據被事務本身改變。可防止髒、不可重複讀,但幻讀仍可能發生
				    5.SERIALIZABLE-完全服從ACID的隔離級別,確保不發生髒、幻、不可重複讀。這在所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務中涉及的數據表來完成的
			    	其中,MySQL默認採用REPEATABLE_READ隔離級別;Oracle默認採用READ_COMMITTED隔離級別  
	     -->
	    
	    
	    <!-- 
	    	配置事物的傳播性
	    		事務傳播行爲:(七種)
			    REQUIRED-支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
			    SUPPORTS-支持當前事務,如果當前沒有事務,就以非事務方式執行。
			    MANDATORY-支持當前事務,如果當前沒有事務,就拋出異常。
			    REQUIRES_NEW-新建事務,如果當前存在事務,把當前事務掛起。
			    NOT_SUPPORTED-以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
			    NEVER-以非事務方式執行,如果當前存在事務,則拋出異常
			    NESTED-如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則進行與REQUIRED類似的操作。擁有多個可以回滾的保存點,內部回滾不會對外部事務產生影響。只對DataSourceTransactionManager有效
	     --> 
	    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">  
	        <tx:attributes>  
	            <tx:method name="add*" propagation="REQUIRED"/>  
	            <tx:method name="save*" propagation="REQUIRED"/>  
	            <tx:method name="update*" propagation="REQUIRED"/>  
	            <tx:method name="modify*" propagation="REQUIRED"/>  
	            <tx:method name="edit*" propagation="REQUIRED"/>  
	            <tx:method name="delete*" propagation="REQUIRED"/>  
	            <tx:method name="remove*" propagation="REQUIRED"/>  
	            <tx:method name="repair" propagation="REQUIRED"/>  
	            <tx:method name="deleteAndRepair" propagation="REQUIRED"/>  
	            <tx:method name="get*" propagation="REQUIRED" />  
	            <tx:method name="find*" propagation="REQUIRED" />  
	            <tx:method name="load*" propagation="REQUIRED" />  
	            <tx:method name="search*" propagation="REQUIRED" />  
	            <tx:method name="datagrid*" propagation="REQUIRED" />  
	            <tx:method name="*" propagation="REQUIRED" />  
	        </tx:attributes>  
	    </tx:advice> 
	     
		<!-- 配置切面(AOP)  保證數據一致性 -->
	<!--     <aop:config>
	    	切面
	    	
	    	
	    		配置切入點
	    		 把事務控制在Service層 
	    		切點(定義到方法)
		    	     (* com.cnpay..service..*.*(..))說明如下:
					     第一個*:代表任意返回值
					     第一個..:cnpay包以及子包
					     第二個*:包下的任意類
					     第三個*:任意方法
					     (..):任意參數		     
	    	
	    	配置切入點
	    	<aop:pointcut expression="execution(* com.service.soa.service.*(..))" id="businessService"/>
	    	配置切面
	   		<aop:advisor advice-ref="transactionAdvice" pointcut-ref="businessService"/>
	   
	    </aop:config> -->
	    		
			
</beans>        

5.7mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 別名 -->
	<typeAliases>
		<package name="com.service.soa.pojo"/>
	</typeAliases>
</configuration>

5.8spring-dubbo-service-api.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:service interface="com.service.soa.api.register.RegisterServiceApi" ref="registerAccess" 
					設置retries=0 避免重複調用SOA服務 protocol="dubbo,rest"/> -->
	<dubbo:service retries="0" interface="com.service.soa.api.register.RegisterServiceApi" ref="registerAccess" 
	protocol="rest" version="0.0.1" connections="10" loadbalance="leastactive" timeout="60000" validation="false"/>
	
	<!--測試接口 -->
	<dubbo:service retries="0" interface="com.service.soa.api.query.QueryUserServiceApi" ref="userServiceAccess" 
	protocol="rest" version="0.0.1" connections="10" loadbalance="leastactive" timeout="60000" validation="false"/>
	
	<!-- 配置dubbo掃描器,  掃描service 註解 的服務實體類放入dubbo容器中 -->
	<!-- <dubbo:annotation package="com.service.soa.access.dubbo"/> -->
		
</beans>

5.9spring-mvc.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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
        
         <!-- 開啓註解掃描功能 springMvc--> 
       <!--  <context:component-scan base-package="com.java.kafka.controller" /> -->
       
        
        <!-- 視圖解析器 (對應DispatcherServlet跳轉(邏輯視圖名))-->
		<!-- <bean id="viewResolver"
			class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<property name="prefix" value="/WEB-INF" />
			<property name="suffix" value=".jsp"></property>
		</bean> -->
        
            
</beans>

5.10 配置文件  *.properties

#=============================mysql===========================================#
jdbc.type=mysql
jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://192.168.80.75:3306/isharedb?useUnicode=true&characterEncoding=utf-8
jdbc.url=jdbc:mysql://localhost:3306/dumz_db?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

#監控統計攔截
jdbc.filters=stat

#最大併發連接數
jdbc.maxActive=20
#初始化連接數量
jdbc.initialSize=1
#連接等待超時
jdbc.maxWait=60000
#最小空閒連接數
jdbc.minIdle=10

#檢測需要關閉的空閒連接
jdbc.timeBetweenEvictionRunsMillis=60000
#連接在池中最小生存的時間
jdbc.minEvictableIdleTimeMillis=300000
#連接是否有效的sql
jdbc.validationQuery=SELECT 'x'
#並且保證安全性
jdbc.testWhileIdle=true
#申請連接時執行validationQuery檢測連接是否有效
jdbc.testOnBorrow=false
#歸還連接時執行validationQuery檢測連接是否有效
jdbc.testOnReturn=false

#=================================redis================================================#

#redis settings
redis.keyPrefix=users
redis.host=127.0.0.1
redis.port=6379
#超時時間
redis.timeout=2000
#注意,如果沒有password,此處不設置值,但這一項要保留
redis.password=123456
#數據庫索引號 index 用數字值指定,以 0 作爲起始索引值(默認使用 0 號數據庫)
redis.db.index=0


######################################################################################


===========================dubbo====================================================

#dubbo應用名稱
dubbo.provider.name=soa-RegisterProvider
#dubbo服務端口
dubbo.provider.port=8890
#dubbo zookeeper註冊地址
dubbo.registry=zookeeper://127.0.0.1:2181
#rest 服務端口
dubbo.provider.rest=8087


######################################################################################

============================= Email ==============================================
email.host=smtp.qq.com
#發件人郵箱登錄名
[email protected] 
#發件人密碼
email.password=uztwtgvafngvechg

executor.corePoolSize=1
executor.maxPoolSize=2
executor.queueCapacity=20
executor.keepAliveSeconds=5000

5.11 服務接口實現類

package com.service.soa.access.register;


import java.util.Date;
import java.util.UUID;

import javax.annotation.Resource;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;
import com.service.soa.api.register.RegisterServiceApi;
import com.service.soa.bean.EmailRequestBean;
import com.service.soa.bean.EmailResponseBean;
import com.service.soa.dao.UserDao;
import com.service.soa.pojo.Email;
import com.service.soa.pojo.User;
import com.service.soa.service.SendEmailService;
import com.service.soa.util.RespUtils;
import com.service.soa.util.UidUtils;

/**
 * 
* @ClassName: RegisterAccess  
* @Description: TODO(郵件通知)  
* @author MAOJIAJIE  
* @date 2019年4月20日  
*
 */
@Service(value = "registerAccess")
public class RegisterAccess implements RegisterServiceApi {
	
	private static Logger log = LoggerFactory.getLogger(RegisterAccess.class);
	
    @Resource
    private UserDao userDao;
	
	@Resource
	RabbitTemplate template;
	
//	@Transactional(rollbackFor = Exception.class)
	@Transactional
	public EmailResponseBean sendMessage(EmailRequestBean emailRequestBean) {
		// TODO Auto-generated method stub		
		Email email = new Email();
		//收件人郵件地址
		email.setToAddress(emailRequestBean.getToAddress());
		//郵件主題
		email.setText("站點測試郵箱");
		email.setContent("註冊成功!");
		
		//入庫
		User user = new User();
		user.setUserId(UidUtils.createUtil());
		user.setUserName(emailRequestBean.getUname());
		user.setCreateTime(new Date());
		user.setUserStart("01");
		user.setOlineStart("01");
		user.setUserEmail(emailRequestBean.getToAddress());
		user.setUserPsw(emailRequestBean.getUpassword());
		//插入表中
		userDao.insert(user);
		//測試註解事物
//		System.out.println(1 / 0);
		try {
			//發送到消息隊列中
			template.convertAndSend(email);
			log.info("****************用戶註冊成功!");
		} catch (AmqpException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			log.info("用戶註冊失敗:原因【"+e.toString()+"】");
		}
			
		return  RespUtils.createBaseResp("000", "測試成功!", email.getToAddress());
	}

	/**
	 * 測試接口
	 * <p>Title: sayHello</p>   
	 * <p>Description: </p>   
	 * @return   
	 * @see com.service.soa.api.register.RegisterServiceApi#sayHello()
	 */
	public String sayHello() {
		// TODO Auto-generated method stub
		return "hello";
	}

    	

}
package com.service.soa.access.quey;

import org.springframework.stereotype.Service;

import com.service.soa.api.query.QueryUserServiceApi;

@Service(value = "userServiceAccess")
public class UserServiceAccess implements  QueryUserServiceApi{

	@Override
	public String test() {
		// TODO Auto-generated method stub
		return "hellojava";
	}

}

6.服務消費方工程  dumz-webFront

6.1 pom 依賴

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.service.soa.dumz</groupId>
  <artifactId>dumz-webFront</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>dumz-webFront Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <!-- 定義全局版本號 -->
	<properties>
		<!-- maven編譯的時候默認使用的GBK編碼, 通過project.build.sourceEncoding屬性設置字符編碼,通知maven使用UTF-8編譯項目 -->
  		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<dubbox.version>2.8.4</dubbox.version>
		<mybatis.version>3.2.8</mybatis.version>
		<spring.version>4.3.2.RELEASE</spring.version>
		<spring.version-test>4.1.6.RELEASE</spring.version-test>
		<mysql.driver.version>5.1.39</mysql.driver.version>
		<junit.version>4.12</junit.version>
		<zkclient.version>0.10</zkclient.version>
	    <curator-framework.version>4.0.1</curator-framework.version>
	    <fastjson.version>1.2.46</fastjson.version>
	    <log4j.version>1.2.17</log4j.version>
	    <slf4j-api.version>1.7.25</slf4j-api.version>
	    <commons-lang3.version>3.4</commons-lang3.version>
	    <netty-all.version>4.0.35.Final</netty-all.version>
	    <component.service-api.version>1.0.2-SNAPSHOT</component.service-api.version>
	</properties>
	
  
  <dependencies>
     <!-- 單元測試 -->
	<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    
	<dependency>
		<groupId>com.service.api</groupId>
		<artifactId>dubbo-demo-api</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
    
     <!-- 導入servlet支持包 -->
    <dependency>
    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>4.0.0-b01</version>
	</dependency>
    
    <!-- 導入jsp支持包 -->
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
	    <artifactId>jsp-api</artifactId>
	    <version>2.2.1-b03</version>
	</dependency>
    
    <!-- 導入jstl支持包 -->
    <dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>
	
	<!-- 導入日誌支持包 -->
	<dependency>
	    <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
	    <version>1.2.17</version>
	</dependency>
	
	<!-- 日誌系統支持(slf4j-log4j12:鏈接slf4j-api和log4j中間的適配器。它實現了slf4j-apiz中StaticLoggerBinder接口,
			從而使得在編譯時綁定的是slf4j-log4j12的getSingleton()方法) -->
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.21</version>
	</dependency>
	
	
	<!-- json支持 -->
	<dependency>
	    <groupId>com.google.code.gson</groupId>
	    <artifactId>gson</artifactId>
	    <version>2.7</version>
	</dependency>
	<dependency>
	    <groupId>net.sf.json-lib</groupId>
	    <artifactId>json-lib</artifactId>
	    <version>2.4</version>
	    <classifier>jdk15</classifier>
	</dependency>
  
  
  	<!-- spring4相關jar包導入 -->
	
	<!-- 提供在基礎IOC(控制反轉)功能上的擴展服務,此外還提供許多企業級服務的支持,有郵件服務、
			任務調度、JNDI定位,EJB集成、遠程訪問、緩存以及多種視圖層框架的支持。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring核心工具包,其它包依賴此包 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring對jdbc的簡單封閉包 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring用於支持web開發時所需的Spring框架的核心類,包括自動載入WebApplicationContext特性的類、
		 Struts與JSF集成類、文件上傳的支持類、Filter類和大量工具輔助類。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-web</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- 用於對spring AOP(面向切面)的支持jar包 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aop</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- 擴展包:spring context 的擴展支持,用於MVC方面-->
	<dependency>
    <groupId>org.springframework</groupId>
	    <artifactId>spring-context-support</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring bean管理包(包括配置文件的訪問和創建bean管理bean)是Spring IOC的基礎實現-->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- spring提供對事物的支持,事務的相關處理以及實現類就在這個jar包中 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-tx</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- 提供對AspectJ的支持,以便可以方便的將面向方面的功能集成進IDE中,比如Eclipse AJDT。
		 外部依賴。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aspects</artifactId>
	    <version>${spring.version}</version>
	</dependency>
	
	<!-- springMvc4對json的支持 -->
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-annotations</artifactId>
	    <version>2.5.0</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-core</artifactId>
	    <version>2.5.0</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-databind</artifactId>
	    <version>2.5.0</version>
	</dependency>
	
	<!-- 這個jar 文件包含Spring MVC 框架相關的所有類。
			包括框架的Servlets,Web MVC框架,控制器和視圖支持。當然,如果你的應用使用了獨立的MVC 框架,則無需這個JAR 文件裏的任何類。
			外部依賴spring-web, (spring-support,Tiles,iText,POI)。 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>${spring.version}</version>
	</dependency> 
	
	<!-- druid數據連接池 -->
	<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid</artifactId>
       <version>1.0.11</version>
    </dependency>

	<!--Spring數據庫訪問中另外一大模塊就是ORM,ORM即對象/關係映射。
		Spring支持大多數ORM框架,比如Hibernate,JPA,JDO,TopLink和iBatis
		(Spring2支持iBatis2,現MyBatis3的Spring支持由MyBatis社區開發,並非Spring)。  -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-orm</artifactId>
	    <version>4.0.2.RELEASE</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework.security</groupId>
		<artifactId>spring-security-config</artifactId>
		<version>4.0.2.RELEASE</version>
	</dependency>
	
	<dependency>
		<groupId>org.springframework.security</groupId>
		<artifactId>spring-security-web</artifactId>
		<version>4.0.2.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.security</groupId>
		<artifactId>spring-security-core</artifactId>
		<version>4.0.2.RELEASE</version>
	</dependency>
	
	<!-- dubbo -->  
	<dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>dubbo</artifactId>
           <version>2.8.4</version>
           <exclusions>
               <exclusion>
                   <groupId>org.springframework</groupId>
                   <artifactId>spring</artifactId>
               </exclusion>
           </exclusions>
       </dependency>
       <dependency>
           <groupId>org.apache.zookeeper</groupId>
           <artifactId>zookeeper</artifactId>
           <version>3.4.11</version>
           <exclusions>
           	<exclusion>
           		<groupId>org.slf4j</groupId>
           		<artifactId>slf4j-log4j12</artifactId>
           	</exclusion>
           	<exclusion>
           		<groupId>junit</groupId>
           		<artifactId>junit</artifactId>
           	</exclusion>
           </exclusions>
       </dependency>
	<!-- dubbox restful 依賴jar -->
	<dependency>
		<groupId>org.jboss.resteasy</groupId>
		<artifactId>resteasy-jaxrs</artifactId>
		<version>3.0.11.Final</version>
	</dependency>
	<dependency>
		<groupId>org.jboss.resteasy</groupId>
		<artifactId>resteasy-client</artifactId>
		<version>3.0.11.Final</version>
		<exclusions>
			<exclusion>
				<groupId>org.jboss.resteasy</groupId>
				<artifactId>resteasy-jaxrs</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	
	<dependency>
		<groupId>org.apache.curator</groupId>
		<artifactId>curator-framework</artifactId>
		<version>2.5.0</version>
		<exclusions>
			<exclusion>
				<groupId>org.apache.curator</groupId>
				<artifactId>curator-client</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.apache.zookeeper</groupId>
				<artifactId>zookeeper</artifactId>
			</exclusion>
			<exclusion>
				<groupId>com.google.guava</groupId>
				<artifactId>guava</artifactId>
			</exclusion>
		</exclusions>
	</dependency>

	<dependency>
		<groupId>org.apache.curator</groupId>
		<artifactId>curator-client</artifactId>
		<version>2.5.0</version>
		<exclusions>
			<exclusion>
				<groupId>com.google.guava</groupId>
				<artifactId>guava</artifactId>
			</exclusion>
			<exclusion>
				<groupId>io.netty</groupId>
				<artifactId>netty</artifactId>
			</exclusion>
			<exclusion>
				<groupId>log4j</groupId>
				<artifactId>log4j</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
			</exclusion>
			<exclusion>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-log4j12</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
		
  </dependencies>
  <build>
    <finalName>dumz-webFront</finalName>
    <configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>UTF-8</encoding>
	</configuration>
  </build>
</project>

6.2 application-context.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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:task="http://www.springframework.org/schema/task" 
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd">
    
		<!-- 自動掃描service dao層  注入spring中-->
       <!--  <context:component-scan base-package="com.umz.soa.service"/>
        <context:component-scan base-package="com.umz.soa.dao"/> -->
    
    	<!-- 獲取配置文件 -->
		<bean id="propertyConfigurer"
			class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
			<property name="locations">
				<list>
					<!-- <value>classpath:config/properties/config.properties</value> -->
					<value>classpath:config/properties/dubbo.properties</value>
				</list>
			</property>
		</bean>
    
    	<!-- 引入其他xml配置文件 -->
		<!-- <import resource="classpath:xml/*.xml"/> -->
	    <!-- <import resource="classpath:config/xml/application-consumer-dubbo.xml"/> -->
	    <import resource="classpath:config/xml/dubbo-service-consumer.xml"/>
	   
    	
    	<!-- springMvc4 用於將對象轉換爲 JSON  -->  
	    <bean id="stringConverter"  
	        class="org.springframework.http.converter.StringHttpMessageConverter">  
	        <property name="supportedMediaTypes">  
	            <list>  
	                <value>text/plain;charset=UTF-8</value>  
	            </list>  
	        </property>  
	    </bean>  
	    <bean id="jsonConverter"  
	        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>  
	    <bean  
	        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
	        <property name="messageConverters">  
	            <list>  
	                <ref bean="stringConverter" />  
	                <ref bean="jsonConverter" />  
	            </list>  
	        </property>  
	    </bean> 
    	  	
</beans>   

6.3dubbo-service-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="dumz-consumer" owner="Starter" organization="dumz" />
    <!-- 註冊中心配置  file 表示緩存dubbo註冊信息列表 以防止註冊中心宕機-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"  file="E:\\dubbo\\dubbo.cache" client="curator"/>
	
 	

         <dubbo:reference id="registerServiceApi" interface="com.service.soa.api.register.RegisterServiceApi" version="0.0.1"/>	
         <dubbo:reference id="queryUserServiceApi" interface="com.service.soa.api.query.QueryUserServiceApi" version="0.0.1"/>
   		
   		 <!-- <dubbo:annotation package="com.umz.soa.controller"/> -->
</beans>

6.4spring-mvc.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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
        
         <!-- 開啓註解掃描功能 springMvc--> 
        <context:component-scan base-package="com.umz.soa.controller" />
  
        
        <!-- 視圖解析器 (對應DispatcherServlet跳轉(邏輯視圖名))-->
		<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<property name="prefix" value="/WEB-INF" />
			<property name="suffix" value=".jsp"></property>
		</bean>
        
            
</beans>

6.5 .properties 配置文件

================================================dubbo=================================
#dubbo zookeeper註冊地址
dubbo.consumer.name = dumz-web
dubbo.registry=zookeeper://127.0.0.1:2181
dubbo.file=E:\\dubbo\\dubbo.cache

6.6 服務消費類

package com.umz.soa.controller.query;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.dubbo.config.annotation.Reference;
import com.service.soa.api.query.QueryUserServiceApi;
import com.service.soa.api.register.RegisterServiceApi;
import com.service.soa.bean.EmailRequestBean;
import com.service.soa.bean.EmailResponseBean;
import com.sun.swing.internal.plaf.metal.resources.metal;
import com.umz.soa.util.RespUtils;


@Controller
@RequestMapping("/query")
public class queryTestServiceController {
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Resource
	RegisterServiceApi registerServiceApi;
	
	@Resource
	QueryUserServiceApi queryUserServiceApi;
	
//	@Resource
//	MerChantUserRemote metal;
	
	@RequestMapping(value = "/test.do",method=RequestMethod.GET)
	@ResponseBody
	public String test() {
		logger.info("測試遠程接口");
		
		return queryUserServiceApi.test();
	}
	
	/**
	 * 首頁
	 * @Title: indexPage
	 * @Description: TODO
	 * @return
	 * @return: String
	 */
	@RequestMapping(value = "/main.do", method = RequestMethod.GET)
	public String indexPage() {

		return "/pages/user/admin";
	}
}
package com.umz.soa.controller.register;

import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.service.soa.api.query.QueryUserServiceApi;
import com.service.soa.api.register.RegisterServiceApi;
import com.service.soa.bean.EmailRequestBean;
import com.service.soa.bean.EmailResponseBean;
import com.umz.soa.util.RespUtils;

@Controller
public class RegisterServiceController {
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Resource
	RegisterServiceApi registerServiceApi;
	
	@Resource
	QueryUserServiceApi queryUserServiceApi;
	
	@RequestMapping(value = "/register/sendEmail.do")
	@ResponseBody
	public EmailResponseBean register() {
		logger.info("測試遠程接口");
//	        String result= registerServiceApi.sayHello();
		EmailRequestBean emailRequestBean = new EmailRequestBean();
		emailRequestBean.setUname("測試用戶4");
		emailRequestBean.setUpassword("123456");
		emailRequestBean.setToAddress("[email protected]");
		
		registerServiceApi.sendMessage(emailRequestBean);
		
	  return RespUtils.createBaseResp("000", "測試成功!", emailRequestBean.getToAddress());
	        
	 //   System.out.println("遠程調用的結果:"+emailResponseBean);
	}
}

6.7 項目中相應類  dubbo-demo-api

package com.umz.soa.util;

import com.service.soa.bean.EmailResponseBean;

public class RespUtils {
	
	/**
	 * 
	* @Title: createBaseResp  
	* @Description: TODO(郵件發送返回實體類)  
	* @param @param retcode
	* @param @param retmsg
	* @param @return    參數  
	* @return EmailResponseBean    返回類型  
	* @throws
	 */
	public static EmailResponseBean createBaseResp(String retcode ,String retmsg,String toAddress){
		EmailResponseBean emailResponseBean = new EmailResponseBean();
		emailResponseBean.setRetcode(retcode);	
		emailResponseBean.setRetmsg(retmsg);
		emailResponseBean.setToAddress(toAddress);
		return emailResponseBean;
	}
}
package com.service.soa.bean;

import java.io.Serializable;


 /**
  * 
 * @ClassName: BaseRespBean  
 * @Description: TODO(返回標識)  
 * @author MAOJIAJIE  
 * @date 2019年4月20日  
 *
  */
public class BaseRespBean implements Serializable {
	
	private static final long serialVersionUID = 8449818967081230166L;
	
	private String retcode;			//	響應碼 000000:成功		其他:失敗
	private String retmsg;			//	響應信息
	public String getRetcode() {
		return retcode;
	}
	public void setRetcode(String retcode) {
		this.retcode = retcode;
	}
	public String getRetmsg() {
		return retmsg;
	}
	public void setRetmsg(String retmsg) {
		this.retmsg = retmsg;
	}
	public BaseRespBean(){
		
	}
	public BaseRespBean(String retcode,String retmsg){
		this.retcode = retcode;
		this.retmsg = retmsg;
	}

}
package com.service.soa.bean;

import java.io.Serializable;

/**
 * 
* @ClassName: EmailRequestBean  
* @Description: TODO(郵箱請求實體類)  
* @author MAOJIAJIE  
* @date 2019年4月19日  
*
 */
public class EmailRequestBean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String uname;//收件人性名
	private String upassword;//收件人密碼
	private String uregdate; //註冊時間
	private Integer ustate;//狀態
	private String fromAddress; //發件人
	private String toAddress;   //收件人
	private String text;    //郵件標題
	private String content; //郵件內容
	private String copyPerson; //抄送人
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpassword() {
		return upassword;
	}
	public void setUpassword(String upassword) {
		this.upassword = upassword;
	}
	public String getUregdate() {
		return uregdate;
	}
	public void setUregdate(String uregdate) {
		this.uregdate = uregdate;
	}
	public Integer getUstate() {
		return ustate;
	}
	public void setUstate(Integer ustate) {
		this.ustate = ustate;
	}
	public String getFromAddress() {
		return fromAddress;
	}
	public void setFromAddress(String fromAddress) {
		this.fromAddress = fromAddress;
	}
	public String getToAddress() {
		return toAddress;
	}
	public void setToAddress(String toAddress) {
		this.toAddress = toAddress;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getCopyPerson() {
		return copyPerson;
	}
	public void setCopyPerson(String copyPerson) {
		this.copyPerson = copyPerson;
	}
	@Override
	public String toString() {
		return "EmailRequestBean [uname=" + uname + ", upassword=" + upassword + ", uregdate=" + uregdate + ", ustate="
				+ ustate + ", fromAddress=" + fromAddress + ", toAddress=" + toAddress + ", text=" + text + ", content="
				+ content + ", copyPerson=" + copyPerson + "]";
	}
	
	
}
package com.service.soa.bean;

import com.sun.xml.bind.v2.schemagen.xmlschema.List;

/**
 * 
* @ClassName: EmailRequestBean  
* @Description: TODO(郵箱返回實體類)  
* @author MAOJIAJIE  
* @date 2019年4月19日  
*
 */
public class EmailResponseBean extends BaseRespBean  {
	private static final long serialVersionUID = 1L;
	private String msg;
	private String toAddress;
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public String getToAddress() {
		return toAddress;
	}
	public void setToAddress(String toAddress) {
		this.toAddress = toAddress;
	}
	@Override
	public String toString() {
		return "EmailResponseBean [msg=" + msg + ", toAddress=" + toAddress + "]";
	}
	
}

7.測試

7.1啓動服務項目  RabbitMqS

 右機類啓動

打開dubbo 管理界面  下面表示註冊成功的兩個服務接口

    7.2運行項目 dumz-webFront 測試消費接口

7.3測試接口 瀏覽器中輸入地址

    消費成功

7.4測試郵箱註冊接口

服務方調用日誌打印信息如下:

  郵件通知成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章