dubbo学习

1、下载zookeeperhtml

使用dubbo须要先下载zookeeper,下载地址:http://archive.apache.org/dist/zookeeper/,根据本身的须要选择版本下载。前端

2、配置zookeeperjava

将下载下来的压缩包解压,并将conf文件夹下的zoo_sample.cfg重命名为zoo.cfg,并修改其内容git

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 数据存放地址
dataDir=E:/zookeeper-3.4.10/zookeeper-3.4.10/data
# 日志存放地址
dataLogDir=E:/zookeeper-3.4.10/zookeeper-3.4.10/logs
# the port at which the clients will connect
# 客服端链接端口
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

3、新建web项目,项目结构为:github

dubbo-provider的pom文件为:web

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  	<modelVersion>4.0.0</modelVersion>
  	
  	<parent>
    	<groupId>org.pan</groupId>
    	<artifactId>dubbo-demo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
  	</parent>
  	
  	<groupId>org.pan</groupId>
  	<artifactId>dubbo-provider</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
  	<packaging>war</packaging>
  	
  	<name>dubbo-provider Maven Webapp</name>
  	<url>http://maven.apache.org</url>
  	
  	<properties>
		<spring.version>4.1.1.RELEASE</spring.version><!-- spring 引入 -->
	</properties>
  	
  	<dependencies>
  		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.7</version>
            <!-- 排除传递spring依赖-->
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-web</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-beans</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-context</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>  
            <!-- 和你下的zookeeper版本要一致-->
            <groupId>org.apache.zookeeper</groupId>  
            <artifactId>zookeeper</artifactId>  
            <version>3.4.10</version>  
            <exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
			</exclusions>
        </dependency>  
    
      	<dependency>  
         	<groupId>com.github.sgroschupf</groupId>  
         	<artifactId>zkclient</artifactId>  
         	<version>0.1</version>  
         	<exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
			</exclusions>
      	</dependency>
  	
  	
  	
  	
  		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 为spring核心提供了大量扩展。能够找到使用spring applicationcontext特性时所需的所有类,-->
		<!-- jdni所需的所有类,ui方面的用来与模板(templating)引擎如 velocity、freemarker、 -->
		<!-- jasperreports集成的类,以及校验validation方面的相关类,还有ejb,cache,format,jms等等。  -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</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的核心包,包含spring框架基本的核心工具类,spring其它组件要都要使用到这个包里的类, -->
		<!-- 是其它组件的基本核心。包括asm,cglib以及相关的工具类 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring表达式语言。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring对jdbc的简单封装 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 包含spring对dao特性集进行了扩展,使其支持 ibatis、jdo、ojb、toplink,-->
		<!-- 由于hibernate已经独立成包了,如今不包含在这个包里了。这个jar文件里大部分的类都要 -->
		<!-- 依赖spring-dao.jar里的类,用这个包时你须要同时包含spring-dao.jar包。-->
		<!-- spring 整合第三方的 orm 映射支持,如 hibernate 、ibatis、jdo 以及spring的jpa的支持。   -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring对junit框架的简单封装。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring提供对事务的支持,事务的相关处理以及实现类就在这个jar包中 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 包含web应用开发时,用到spring框架时所需的核心类,包括自动载入webapplicationcontext特性的类、 -->
		<!-- struts与jsf集成类、文件上传的支持类、filter类和大量工具辅助类。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring mvc相关,实现springmvc的操做。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
  		
  	
    	<!-- 对json和xml格式的支持类 -->
		<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.34</version>
		</dependency>


		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.5.6</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.5.6</version>
		</dependency>

		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.5</version>
		</dependency>
		

		<!-- 若是你使用到了JSP页面,这就须要 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
  	</dependencies>
  	
  	
  	<build>
    	<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
  	</build>
</project>

dubbo-consumer的pom文件为:spring

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  	<modelVersion>4.0.0</modelVersion>
  	
  	<parent>
    	<groupId>org.pan</groupId>
    	<artifactId>dubbo-demo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
  	</parent>
  	
  	<groupId>org.pan</groupId>
  	<artifactId>dubbo-consumer</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
  	<packaging>war</packaging>
  	
  	<name>dubbo-consumer Maven Webapp</name>
  	<url>http://maven.apache.org</url>
  	
  	<properties>
		<spring.version>4.1.1.RELEASE</spring.version><!-- spring 引入 -->
	</properties>
  	
  	<dependencies>
  		
  		<dependency>
			<groupId>org.pan</groupId>
		  	<artifactId>dubbo-provider</artifactId>
		  	<version>0.0.1-SNAPSHOT</version>
		</dependency>
		
		
		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.7</version>
            <!-- 排除传递spring依赖-->
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-web</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-beans</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-context</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>  
            <groupId>org.apache.zookeeper</groupId>  
            <artifactId>zookeeper</artifactId>  
            <version>3.4.10</version>  
            <exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
			</exclusions>
        </dependency>  
    
      	<dependency>  
         	<groupId>com.github.sgroschupf</groupId>  
         	<artifactId>zkclient</artifactId>  
         	<version>0.1</version>  
         	<exclusions>
				<exclusion>
					<groupId>log4j</groupId>
					<artifactId>log4j</artifactId>
				</exclusion>
			</exclusions>
      	</dependency>
  		
  	
  		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 为spring核心提供了大量扩展。能够找到使用spring applicationcontext特性时所需的所有类,-->
		<!-- jdni所需的所有类,ui方面的用来与模板(templating)引擎如 velocity、freemarker、 -->
		<!-- jasperreports集成的类,以及校验validation方面的相关类,还有ejb,cache,format,jms等等。  -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</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的核心包,包含spring框架基本的核心工具类,spring其它组件要都要使用到这个包里的类, -->
		<!-- 是其它组件的基本核心。包括asm,cglib以及相关的工具类 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring表达式语言。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring对jdbc的简单封装 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 包含spring对dao特性集进行了扩展,使其支持 ibatis、jdo、ojb、toplink,-->
		<!-- 由于hibernate已经独立成包了,如今不包含在这个包里了。这个jar文件里大部分的类都要 -->
		<!-- 依赖spring-dao.jar里的类,用这个包时你须要同时包含spring-dao.jar包。-->
		<!-- spring 整合第三方的 orm 映射支持,如 hibernate 、ibatis、jdo 以及spring的jpa的支持。   -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring对junit框架的简单封装。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring提供对事务的支持,事务的相关处理以及实现类就在这个jar包中 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 包含web应用开发时,用到spring框架时所需的核心类,包括自动载入webapplicationcontext特性的类、 -->
		<!-- struts与jsf集成类、文件上传的支持类、filter类和大量工具辅助类。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring mvc相关,实现springmvc的操做。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
  		
  	
    	<!-- 对json和xml格式的支持类 -->
		<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.34</version>
		</dependency>


		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.5.6</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.5.6</version>
		</dependency>

		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.5</version>
		</dependency>
		

		<!-- 若是你使用到了JSP页面,这就须要 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
  	</dependencies>
  	
  	
  	<build>
    	<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
  	</build>
</project>

4、dubbo-providerexpress

dubbo-provider.xmlapache

<?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  
        ">  
  
    <!-- 具体的实现bean -->  
    <!-- <bean id="loginService" class="org.pan.provider.service.impl.LoginServiceImpl" /> -->  
  
    <!-- 提供方应用信息,用于计算依赖关系 -->  
    <dubbo:application name="dubbo_provider" />
      
    <!-- 使用zookeeper注册中心暴露服务地址 即zookeeper的所在服务器ip地址和端口号 -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  
    <!-- 用dubbo协议在20880端口暴露服务 -->  
    <dubbo:protocol name="dubbo" port="20880" />  
  
    <!-- 声明须要暴露的服务接口 -->  
    <dubbo:service interface="org.pan.provider.service.LoginService"  ref="loginServiceImpl" />  
  
</beans>

将dubbo-provider.xml引入到spring-servlet.xmljson

<?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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
    
   
	<context:component-scan base-package="org.pan.provider" />
    
    
    
    
   
   	<!-- 开启springmvc注解支持 -->
   	<mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
        	<!-- 配置json的转换器使用的是fastjson -->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                 <property name="charset" value="UTF-8" />
				 <property name="supportedMediaTypes">
					<list>
						<!-- 这里顺序不能反,必定先写text/html,否则ie下出现下载提示 -->
						<value>text/html;charset=UTF-8</value>
						<value>text/json;charset=UTF-8</value>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    
    
    <import resource="classpath:dubbo-provider.xml" />
   	
   	
   	<!-- 定义静态资源包,定义以后,请求将不会达到HandleMapping,而是直接从该资源包中提取资源文件 -->
   	<mvc:resources location="/static/" mapping="/static/**"></mvc:resources>
   	 
   	<!-- 定义一个拦截器栈 -->
    <mvc:interceptors>
    
    	<!-- 定义一个拦截器链 -->
    	<mvc:interceptor>
    		<mvc:mapping path="/*/*"/>
    		<bean class="org.pan.provider.intercepter.EncodingInterceptor"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>
	
	<!-- 配置一个文件上传解析器,此ID是固定的,没法改变的 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 单位是byte,例如:10M=10*1024*1024 当设值为:-1时表示不限制容量 -->
		<property name="maxUploadSize" value="-1"></property>
		<!-- 默认字符集编码 -->	
		<property name="defaultEncoding" value="UTF-8"></property>
		<!-- 每次读取文件时,最大的内存容量 -->
		<property name="maxInMemorySize" value="1024"></property>
	</bean>
	
    <!-- 配置一个试图解析器ViewResolver(应用控制器) --> 
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<!-- 若是你的页面使用到了JSTL技术,须要指定JstlView类来专门解析 -->
    	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    	<property name="prefix" value="/"></property>
    	<property name="suffix" value=""></property>
    </bean>    
    
    
    
    
</beans>

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	
	<!-- 启动Spring大容器,将Spring容器内的内容归入到WEB容器中 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-servlet.xml</param-value>
	</context-param>	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	
	<!-- 配置前端控制器 -->
	<servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-servlet.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc</servlet-name>
		<!-- 在DispatcherServlet中/表明全部,其余地方都是/* -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	
</web-app>

LoginService.java

package org.pan.provider.service;
/**
 * @author panmingshuai
 * @description 
 * @Time 2018年3月7日  下午6:26:57
 *
 */
public interface LoginService {
	String getStr();
}

LoginServiceImpl.java

package org.pan.provider.service.impl;

import org.pan.provider.service.LoginService;

import com.alibaba.dubbo.config.annotation.Service;

/**
 * @author panmingshuai
 * @description 
 * @Time 2018年3月7日  下午6:27:23
 *
 */
@org.springframework.stereotype.Service
public class LoginServiceImpl implements LoginService {

	@Override
	public String getStr() {
		return "服务端2";
	}

}

EncodingInterceptor.java

package org.pan.provider.intercepter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class EncodingInterceptor implements HandlerInterceptor{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		
	}
	
}

5、dubbo-consumer

dubbo-consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://code.alibabatech.com/schema/dubbo  
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
        ">  
  
    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方同样 -->  
    <dubbo:application name="dubbo_consumer" />  
  
    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  
    <!-- 生成远程服务代理,能够像使用本地bean同样使用demoService -->  
    <dubbo:reference id="loginService"  interface="org.pan.provider.service.LoginService" />  
  
</beans>

将dubbo-consumer.xml引入到spring-servlet2.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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
   
	
	
	
	<context:component-scan base-package="org.pan.consumer" />
    
    
    <import resource="classpath:dubbo-consumer.xml" />
    
   
   	<!-- 开启springmvc注解支持 -->
   	<mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
        	<!-- 配置json的转换器使用的是fastjson -->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                 <property name="charset" value="UTF-8" />
				 <property name="supportedMediaTypes">
					<list>
						<!-- 这里顺序不能反,必定先写text/html,否则ie下出现下载提示 -->
						<value>text/html;charset=UTF-8</value>
						<value>text/json;charset=UTF-8</value>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
   	
   	
   	
   	
   	
   	<!-- 定义静态资源包,定义以后,请求将不会达到HandleMapping,而是直接从该资源包中提取资源文件 -->
   	<mvc:resources location="/static/" mapping="/static/**"></mvc:resources>
   	 
   	<!-- 定义一个拦截器栈 -->
    <mvc:interceptors>
    
    	<!-- 定义一个拦截器链 -->
    	<mvc:interceptor>
    		<mvc:mapping path="/*/*"/>
    		<bean class="org.pan.consumer.intercepter.EncodingInterceptor"></bean>
    	</mvc:interceptor>
    </mvc:interceptors>
	
	<!-- 配置一个文件上传解析器,此ID是固定的,没法改变的 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 单位是byte,例如:10M=10*1024*1024 当设值为:-1时表示不限制容量 -->
		<property name="maxUploadSize" value="-1"></property>
		<!-- 默认字符集编码 -->	
		<property name="defaultEncoding" value="UTF-8"></property>
		<!-- 每次读取文件时,最大的内存容量 -->
		<property name="maxInMemorySize" value="1024"></property>
	</bean>
	
    <!-- 配置一个试图解析器ViewResolver(应用控制器) --> 
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<!-- 若是你的页面使用到了JSTL技术,须要指定JstlView类来专门解析 -->
    	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    	<property name="prefix" value="/"></property>
    	<property name="suffix" value=""></property>
    </bean>    
    
    
    
    
    
    
    
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	
	<!-- 启动Spring大容器,将Spring容器内的内容归入到WEB容器中 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-servlet2.xml</param-value>
	</context-param>	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	
	<!-- 配置前端控制器 -->
	<servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-servlet2.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc</servlet-name>
		<!-- 在DispatcherServlet中/表明全部,其余地方都是/* -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	
</web-app>

LoginCousumerController.java

package org.pan.consumer.controller;


import javax.annotation.Resource;

import org.pan.provider.service.LoginService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 
 * @author panmingshuai
 * @description 
 * @Time 2018年3月8日  上午10:20:50
 *
 */

@RequestMapping("/login")
@Controller
public class LoginConsumerController {
	
	@Resource(name = "loginService")
	private LoginService loginService;
	
	@RequestMapping(value = "/loginone")
	@ResponseBody
	public String login0(){
		return loginService.getStr();
	}
	
	
	
	
	
	
	
	public static void main(String[] args) {
		
		try {
			// 初始化Spring
			ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-servlet2.xml");
			LoginService loginService = (LoginService) ctx.getBean("loginService"); // 获取远程服务代理
			System.out.println(loginService.getStr());; // 运行远程方法
			} catch (Exception e) {
				e.printStackTrace();
			}
	}
}

6、启动项目

先启动zookeeper,点击zookeeper文件夹下bin文件夹下的zkServer.cmd启动zookeeper。

分别为provider和consumer,new一个Tomcat,记住consumer的端口改成8006,8081,8010

访问localhost:8081/dubbo-consumer/login/loginone,能够看到获得了provider项目中接口的返回值,远程调用成功。

相关文章
相关标签/搜索