zoukankan      html  css  js  c++  java
  • DUBBO分布式入门

    Dubbox框架简介:

      Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目广泛使用,但是后阿里巴巴对该项目停止维护了,当当网后来组建了一个团队一直维护Dubbo,所以改名为Dubbox。(现如今已经纳入Apache团队)。

            Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbox这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架

      

    节点角色说明:

    · Provider: 暴露服务的服务提供方。

    · Consumer: 调用远程服务的服务消费方。

    · Registry: 服务注册与发现的注册中心。

    · Monitor: 统计服务的调用次调和调用时间的监控中心。

    · Container: 服务运行容器。

    调用关系说明:

    · 0. 服务容器负责启动,加载,运行服务提供者。

    · 1. 服务提供者在启动时,向注册中心注册自己提供的服务。

    · 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

    · 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推

    送变更数据给消费者。

    · 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,

    如果调用失败,再选另一台调用。

    · 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计

    数据到监控中心。

     

    注册中心Zookeeper

      Zookeeper Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbox 服务的注册中心,工业强度较高,可用于生产环境。

     

    Zookeeper Linux系统的安装

     

    安装步骤:

     

    第一步:安装 jdk(此步省略,我给大家提供的镜像已经安装好JDK

     

    第二步:把 zookeeper 的压缩包(资源配套软件dubboxzookeeper-3.4.6.tar.gz)上传到 linux 系统。

     

    Alt+P 进入SFTP ,输入put d:zookeeper-3.4.6.tar.gz 上传

     

    第三步:解压缩压缩包

     

    tar -zxvf zookeeper-3.4.6.tar.gz

     

    第四步:进入conf目录 ,把 zoo_sample.cfg 改名为 zoo.cfg

     

    cd conf

    mv zoo_sample.cfg  zoo.cfg

     

    3.3.3 Zookeeper 服务启动

    进入bin目录,启动服务输入命令

     ./zkServer.sh start

    输出以下内容表示启动成功

     

    关闭服务输入命令./zkServer.sh stop

    输出以下提示信息查看状态: ./zkServer.sh status

     

    如果启动状态,提示

     

    如果未启动状态,提示:

     

    入门Demo

    Maven工程(WARdubboxdemo-service,  war项目  ,在pom.xml中引入依赖

      

     <properties>		
    		<spring.version>4.2.4.RELEASE</spring.version>
       </properties>    
    	<dependencies>
    		<!-- Spring -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-beans</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-aspects</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jms</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context-support</artifactId>
    			<version>${spring.version}</version>
    		</dependency>	
    		<!-- dubbo相关 -->
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>dubbo</artifactId>
    			<version>2.8.4</version>			
    		</dependency>
    		<dependency>
    			<groupId>org.apache.zookeeper</groupId>
    			<artifactId>zookeeper</artifactId>
    			<version>3.4.6</version>
    		</dependency>
    		<dependency>
    			<groupId>com.github.sgroschupf</groupId>
    			<artifactId>zkclient</artifactId>
    			<version>0.1</version>
    		</dependency>		
    		<dependency>
    			<groupId>javassist</groupId>
    			<artifactId>javassist</artifactId>
    			<version>3.11.0.GA</version>
    		</dependency>		
    	</dependencies>
       <build>  
    	  <plugins>
    	      <plugin>  
    	          <groupId>org.apache.maven.plugins</groupId>  
    	          <artifactId>maven-compiler-plugin</artifactId>  
    	          <version>2.3.2</version>  
    	          <configuration>  
    	              <source>1.7</source>  
    	              <target>1.7</target>  
    	          </configuration>  
    	      </plugin>  
    	      <plugin>
    				<groupId>org.apache.tomcat.maven</groupId>
    				<artifactId>tomcat7-maven-plugin</artifactId>
    				<configuration>
    					<!-- 指定端口 -->
    					<port>8081</port>
    					<!-- 请求路径 -->
    					<path>/</path>
    				</configuration>
    	  	  </plugin>
    	  </plugins>  
        </build>
     
    

     

     服务提供者web.xml

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    	version="2.5">	
    	<!-- 加载spring容器 -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:applicationContext*.xml</param-value>
    	</context-param>
    	<listener>		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>	
    </web-app>
    

    编写配置文件

    src/main/resources下创建applicationContext-service.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:context="http://www.springframework.org/schema/context"
    	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
         
    	<dubbo:application name="dubboxdemo-service"/>  
    <dubbo:registry address="zookeeper://192.168.200.128:2181"/> 
    <dubbo:annotation package="cn.kingwo.dubboxdemo.service" /> 
    </beans>
    

     

       创建包cn.itcast.dubbodemo.service,用于存放业务接口,创建接口,实现类

    public interface UserService {	
    	public String getName();	
    }
    
     
    @Service
    public class UserServiceImpl implements UserService {
    	public String getName() {		
    		return "张三";
    	}
    }
    

     测试运行

     

     客户端编码:

    Maven工程(WARdubboxdemo-web, war项目 pom.xml引入依赖(服务端已经演示,客户端直接粘贴即可) ,同“dubboxdemo-service”工程。区别就是把tomcat插件的运行端口改为8082

    webapps目录下创建WEB-INF 目录,并创建web.xml

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    	version="2.5">	
       <!-- 解决post乱码 -->
    	<filter>
    		<filter-name>CharacterEncodingFilter</filter-name>		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    		<init-param>
    			<param-name>encoding</param-name>
    			<param-value>utf-8</param-value>
    		</init-param>
    		<init-param>  
                <param-name>forceEncoding</param-name>  
                <param-value>true</param-value>  
            </init-param>  
    	</filter>
    	<filter-mapping>
    		<filter-name>CharacterEncodingFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>		
      <servlet>
      	<servlet-name>springmvc</servlet-name>  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      	<!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
      	<init-param>
      		<param-name>contextConfigLocation</param-name>
      		<param-value>classpath:applicationContext-web.xml</param-value>
      	</init-param>
      </servlet>  
      <servlet-mapping>
      	<servlet-name>springmvc</servlet-name>
      	<url-pattern>*.do</url-pattern>
      </servlet-mapping>
    </web-app>
    

     src/main/resources下创建applicationContext-web.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:context="http://www.springframework.org/schema/context"
    	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    	<mvc:annotation-driven >
    		<mvc:message-converters register-defaults="false">
    			<bean class="org.springframework.http.converter.StringHttpMessageConverter">  
    				<constructor-arg value="UTF-8" />
    			</bean>  
    		</mvc:message-converters>	
    	</mvc:annotation-driven>
    	<!-- 引用dubbo 服务 -->
    	<dubbo:application name="dubboxdemo-web" />
    	<dubbo:registry address="zookeeper://192.168.200.128:2181"/>
         <dubbo:annotation package="cn.kingwo.dubboxdemo.controller" />
    </beans>
    

    拷贝业务接口

    dubboxdemo-service”工程的cn.itcast.dubboxdemo.service 包以及下面的接口拷贝至此工程。

    编写Controller

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @Reference
        private UserService userService;    
        @RequestMapping("/showName")
        @ResponseBody
        public String showName(){
            return userService.getName();
        }        
    }

    测试运行

    tomcat7:run

     

  • 相关阅读:
    116. Populating Next Right Pointers in Each Node
    117. Populating Next Right Pointers in Each Node II
    经典排序算法总结(含JAVA代码实现)
    Android面试算法篇(java)
    Android单例模式
    Android进阶-Android APK安装过程
    Android进阶-Android性能优化总结
    Android进阶-Android内存泄漏总结
    Android进阶-Android权限处理
    Android进阶-一个APP从启动到主页显示经过了哪些过程?
  • 原文地址:https://www.cnblogs.com/sjzxs/p/9550811.html
Copyright © 2011-2022 走看看