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="2659217497@qq.com"/>
        <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.username=2659217497@qq.com 
#发件人密码
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("2460983732@qq.com");
		
		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测试邮箱注册接口

服务方调用日志打印信息如下:

  邮件通知成功

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值