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項目中接口的返回值,遠程調用成功。

相關文章
相關標籤/搜索