dubbo基于Zookeeper实现分布式实例

实例Demo

1 安装ZooKeeper

1.1 下载 http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/   ,这里选择版本3.4.8

1.2 解压到一个目录下(D:\zookeeper-3.3.6)打开conf文件夹,拷贝zoo_sample.cfg文件,并重命名为zoo.cfg(必须是这个名字)。打开zoo.cfg修改配置如下:

dubbo基于Zookeeper实现分布式实例_第1张图片

tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间

initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值

clientPort:服务的监听端口:后面的Dubbo配置管理与此端口保持一致。

dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)

dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争

syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。

集群配置使用 

server.A=B:C:D:

A是一个数字,表示这个是第几号服务器,B是这个服务器的ip地址

C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口

D是在leader挂掉时专门用来进行选举leader所用。


1.3 找到bin目录下的zkServer.cmd,启动zookeeper.

2 安装 dubbo-admin 用于管理dubbo

2.1 下载dubbo-master  https://github.com/alibaba/dubbo

2.2 编译打包:进入admin-master/dubbo-admin/目录,调出命令行,运行maven命令:mvn clean install -Dmaven.test.skip=true,成功后在target目录下找到war包。

2.3 将war包放入tomcat(注意端口冲突)的webapps目录下,运行startup.bat解压war包后,在解压后的dubbo-admin的WEB-INF目录下打开dubbo.properties配置文件

 dubbo基于Zookeeper实现分布式实例_第2张图片

这里本机使用2181端口,不需要修改。

3.3 启动tomcat,输入tomcat的访问网址http://localhost:8888/dubbo-admin-2.8.4/,root用户登录,密码root

dubbo基于Zookeeper实现分布式实例_第3张图片



3 创建公共接口项目 DemoService

3.1  创建Maven Project

dubbo基于Zookeeper实现分布式实例_第4张图片

3.2 在DemoService中新建 DemoService接口

dubbo基于Zookeeper实现分布式实例_第5张图片

dubbo基于Zookeeper实现分布式实例_第6张图片

3.3 将DemoService安装到本地Maven库,项目右键 -> Run As-> Maven install ,这里需注意Jdk的版本,项目右键 -> Build Path -> Configure Build Path -> Libralies .jdk版本要保持一致。

4 创建2个Maven Project ,proverder01和proverder02

4.1 proverder需要引入DemoService依赖,需要引入Dubbo,ZooKeeper,log4,spring依赖。Dubbo自带spring依赖,版本旧需手动移除。下面给出一个pom实例



	
		
			com.test
			DemoService
			0.0.1-SNAPSHOT
		
		
			org.springframework
			spring-core
			4.3.9.RELEASE
		
		
			org.springframework
			spring-context
			4.3.9.RELEASE
		
		
			org.springframework
			spring-beans
			4.3.9.RELEASE
		
		
			org.springframework
			spring-web
			4.3.9.RELEASE
		
		
			org.springframework
			spring-webmvc
			4.3.9.RELEASE
		
		
			com.alibaba
			dubbo
			2.5.3
			
				
					org.springframework
					spring
				
				
					org.jboss.netty
					netty
				
			
		
		
			org.apache.zookeeper
			zookeeper
			3.4.8
		

		
		
			log4j
			log4j
			1.2.16
		
		
			org.slf4j
			slf4j-api
			1.7.5
		

		
		
			com.github.sgroschupf
			zkclient
			0.10
		

	
	  
        provider01  

4.2 provider提供者需要实现公共接口以向消费者提供服务。Provider01与provider02实现时可以在内容上有所区别:

dubbo基于Zookeeper实现分布式实例_第7张图片

4.3 增加项目所需配置文件,在classpath目录下新建3个配置文件:applicationContext.xml(Spring配置文件),log4.properties,provider.xml(dubbo提供者配置文件,重要)


 4.3.1 ApplicationContext.xml(provider01与provider02一样)

  
  
      
      
      

4.3.2   log4.properties(provider01与provider02一样)

log4j.appender.mylog = org.apache.log4j.ConsoleAppender    
log4j.appender.mylog.target = System.out   
log4j.appender.mylog.layout= org.apache.log4j.PatternLayout    
log4j.appender.mylog.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n    
log4j.appender.my2log = org.apache.log4j.RollingFileAppender    
log4j.appender.my2log.File = D://Logger//mylog.log    
log4j.appender.my2log.MaxFileSize = 50KB    
log4j.appender.my2log.MaxBackupIndex = 1    
log4j.appender.my2log.layout= org.apache.log4j.PatternLayout     
log4j.appender.my2log.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n    
log4j.rootLogger = info,mylog,my2log
4.3.3  Provider.xml文件,dubbo的配置文件,需要注意暴露服务的端口,在同一台机器上暴露不同的端口。

Provider01:

  
  
   
      
      
   
      
      
   
      
    
     
      
     
 
      
   
 

Provider02:

  
  
   
      
      
   
      
      
   
      
    
     
      
     
 
      
   
  

4.3.4  配置web.xml文件(provider01和provider02一样)

  
        contextConfigLocation  
        classpath*:applicationContext.xml  
      
      
        org.springframework.web.context.ContextLoaderListener  
      
  
    
    
        log4jConfigLocation
         /WEB-INF/classes/log4j.properties
    
    
        log4jRefreshInterval
        60000
    
    
        
		    org.springframework.web.util.Log4jConfigListener
	    
     
    
    
  	
  	
	
	    encodingFilter
	        org.springframework.web.filter.CharacterEncodingFilter
	    
	        encoding
	        utf-8
	    
	
	
	    encodingFilter
	    /*
	
  	  
  
  
      
      
        default  
        *.jpg  
      
      
        default  
        *.png  
      
      
        default  
        *.js  
      
      
        default  
        *.css  
      
      
      
      
        springmvc  
        org.springframework.web.servlet.DispatcherServlet  
          
            contextConfigLocation  
            classpath*:springmvc-servlet.xml  
          
        1  


这里需要注意的是:2个provider的应用名,服务名保持一样,因为模拟集群负载均衡,模拟一个服务。2个provider的端口需不一样,因为是同一台机子模拟2个服务,如果是多台就无所谓了。

4.4 将provider01和provider02分别放入到两个tomcat里。启动!查看dubbo-admin发现:有一个服务,DemoServcie,一个应用Provider,两个提供者。

dubbo基于Zookeeper实现分布式实例_第8张图片




5 创建一个消费者 consumer01

5.1 consumer01与Provider一样,需要依赖DemoService,dubbo,spring,log4j,zookeeper依赖。下面给出一个pom实例:


		4.3.9.RELEASE
	
	
		
			com.test
			DemoService
			0.0.1-SNAPSHOT
		
		
			junit
			junit
			3.8.1
			test
		
		
			com.alibaba
			dubbo
			2.5.3
			
				
					spring
					org.springframework
				
				
					org.jboss.netty
					netty
				
			
		

		
		
			org.springframework
			spring-core
			${spring.version}
		
		
			org.springframework
			spring-context
			${spring.version}
		
		
			org.springframework
			spring-beans
			${spring.version}
		
		
			org.springframework
			spring-web
			${spring.version}
		
		
			org.springframework
			spring-webmvc
			${spring.version}
		

		
			org.springframework
			spring-context-support
			4.3.11.RELEASE
		

		
		
			commons-logging
			commons-logging
			1.2
		
		
		
			javax.servlet
			javax.servlet-api
			3.0.1
			provided
		
		
			javax.servlet
			jstl
			1.1.2
			provided
		
		
			javax.servlet.jsp
			javax.servlet.jsp-api
			2.3.1
			provided
		
		
		
			jstl
			jstl
			1.2
		
		
			taglibs
			standard
			1.1.2
		

		
		
			log4j
			log4j
			1.2.16
		
		
			org.slf4j
			slf4j-api
			1.7.5
		

		
			org.apache.zookeeper
			zookeeper
			3.4.8
		
		
		
			com.github.sgroschupf
			zkclient
			0.1
		
	
	
		consumer01
	

5.2 添加配置文件,在classpath目录下新建4个配置文件:applicationContext.xml(Spring配置文件),springmvc-servlet.xml,log4.properties,consumer.xml(dubbo提供者配置文件,重要)

Application.xml:

  
  
      
      
      
  

springmvc-servlet.xml

  
  
  
      
      
  
      
      
      
      
      
          
          
      
          
          
          
          
      


log4j.xml

log4j.appender.mylog = org.apache.log4j.ConsoleAppender    
log4j.appender.mylog.target = System.out   
log4j.appender.mylog.layout= org.apache.log4j.PatternLayout    
log4j.appender.mylog.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n    
log4j.appender.my2log = org.apache.log4j.RollingFileAppender    
log4j.appender.my2log.File = D://Logger//mylog.log    
log4j.appender.my2log.MaxFileSize = 50KB    
log4j.appender.my2log.MaxBackupIndex = 1    
log4j.appender.my2log.layout= org.apache.log4j.PatternLayout     
log4j.appender.my2log.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n    
log4j.rootLogger = info,mylog,my2log
Consumer.xml

  
  
   
      
      
   
      
      
   
      
      
   


配置web.xml文件

  
      
        contextConfigLocation  
        classpath*:applicationContext.xml  
      
      
        org.springframework.web.context.ContextLoaderListener  
      
      
      
        log4jConfigLocation  
        classpath:log4j.properties  
      
  
      
        log4jRefreshInterval  
        3000  
      
      
        org.springframework.web.util.Log4jConfigListener  
      
      
      
      
        encodingFilter  
        org.springframework.web.filter.CharacterEncodingFilter  
          
            encoding  
            UTF-8  
          
      
      
        encodingFilter  
        /  
      
  
  
      
      
        default  
        *.jpg  
      
      
        default  
        *.png  
      
      
        default  
        *.js  
      
      
        default  
        *.css  
      
      
      
      
        springmvc  
        org.springframework.web.servlet.DispatcherServlet  
          
            contextConfigLocation  
            classpath*:springmvc-servlet.xml  
          
        1  
      
      
        springmvc  
        /  

5.3 新建一个TestController类

dubbo基于Zookeeper实现分布式实例_第9张图片

package com.test.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.test.service.DemoService;

@Controller
public class TestController {
	
	@Autowired
	private DemoService demoService;
	
	@RequestMapping("/test/demo")
	public String testDemo() {
		return "consumer01 : "+demoService.sayHello();
	}

}

5.4 将cosumer01放入一个tomcat中,启动后,查看dubbo-admin

dubbo基于Zookeeper实现分布式实例_第10张图片

访问消费者服务后应会出现两种情况:

consumer01 : this is Provider01

consumer01 : this is Provider02


最近项目中用到dubbo框架,在此记录一下。参照博客:点击打开链接





你可能感兴趣的:(java)