普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包

一、背景

假如当前有一个系统,里面包含了用户模块、积分模块、商城模块...等等等,非分布式的做法是开一个web工程,把所有的模块放到同一个系统中,前端web页面也放其中,称为单体工程。很明显,这种做法会产生很多问题,臃肿、扩展延伸性差、性能瓶颈低、不利研发分组等。在分布式下则不同,每个模块都成为独立的一个系统,各个系统之间相互调用,加上前后端分离,让服务器端只提供接口,供pcweb、移动web、微信公众号等调用。

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。当前很多公司首选Dubbo作为RPC框架,本人之前也有接触并使用,下面就使用一套ssm系统简单的介绍下Dubbo的使用。

二、功能简单介绍

系统介绍:两个系统,会员系统和商城系统,都是ssm搭建,会员系统中包含了商城的web页面,商城系统只暴露接口没有web页面。商城功能包含显示所有商品、个人购物车、下单等。

功能截图

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第1张图片普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第2张图片普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第3张图片

 

三、引入dubbo+zookeeper

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第4张图片

会员系统作为dubbo角色中的consumer,商城系统作为provider,另外再下载zookeeper、监控中心dubbo-admin-2.5.4。

1、服务提供者商城系统配置dubbbo

引入dubbo和zookeeper依赖包,在pom.xml中加入依赖:


        
            com.alibaba
            dubbo
            2.5.3
            
                
                    spring
                    org.springframework
                
            
        
        

        
        
            org.apache.zookeeper
            zookeeper
            3.4.6
            
                
                    log4j
                    log4j
                
            
         
        
            com.101tec
            zkclient
            0.10
        
        

新建dubbo配置文件,spring-dubbo.xml,作为dubbo服务提供者配置文件:




    
    
    
     
    
    

    
    
    
    
    
    
    
    
    
    
    
      

这里的sevice实现类使用@Service注解修饰,注意是com.alibaba.dubbo.config.annotation.Service注解。

并在web.xml中加入启动:


    contextConfigLocation
    
    	classpath:spring-mybatis.xml,
      	classpath:spring-dubbo.xml
    

下载注册中心zookeeper,进入Apache ZooKeeper官方网站进行下载,https://zookeeper.apache.org/releases.html,此时还是在windows操作系统上,linux后续再使用:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第5张图片

下载完成解压,复制conf文件夹下zoo_sample.cfg并命名为zoo.cfg,就可以启动,双击bin目录下zkServer.cmd启动zookeeper,启动成功后入下图:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第6张图片

下载dubbo管理控制台dubbo-admin,这里使用的是dubbo-admin-2.5.4,为一个web项目,下载后放入tomcat,启动后有登录页面,默认root/root。

tomcat容器启动商城项目,启动成功后在dubbo-admin中查看服务提供者和服务接口:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第7张图片

可以看到在dubbo-privoder中配置的三个服务接口,代表配置成功。


2、服务消费者会员系统配置dubbbo

消费端同样需要导入maven依赖包,与提供者一样。

新建dubbo配置文件,spring-dubbo.xml,作为dubbo服务消费者配置文件:




    
    
    
    
    
    

    
   
    
    
    
     

在消费者配置文件中,dubbo:reference总的id属性代表bean的id值,interface的值必须与提供者中的值一致,所以在消费者工程中需要建立相应的包以及相应的接口类,在接口类中注入上述bean即可调用。如在controller中使用如下注入方式:

@Resource
private ShopCarIService shopCarIService;

就可以完成注入,进行远程方法调用。

dubbo配置文件同样需要在web.xml中加入启动设置,也可以讲spring-dubbo配置文件import进spring-mybatis.xml配置文件中。

配置完后启动消费者,查看dubbo-admin中消费者: 

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第8张图片

可以看到消费者三个消费接口。


上述服务提供者和消费者都是部署在各自的tomcat容器当中,依托tomcat才能运行对外提供服务,如果服务有很多,将有同样多的tomcat,将占用更多的端口,tomcat更多的是一个servlet容器,比较适合web项目。

另外两种启动服务方式为使用main方法启动和使用Dubbo框架提供的main方法来启动。

四、dubbo服务启动运行方式

这里提供三种方式,一是作为web项目放在tomcat中启动,二是使用main方法启动spring容器,从而启动dubbo服务,三是使用maven构建可执行jar包,直接启动jar方式。

dubbo启动方式 优缺点描述 场景
使用servlet容器运行(tomcat、jetty) 借助tomcat添加了复杂性,占用更多的端口、内存 不建议使用

自建Main方法类运行spring容器

稳定性差,手动编写启动类存缺陷,dubbo高级特性未使用(优雅关机) 不建议使用,可作为本地研发调试
使用dubbo框架提供的Main方法类运行(spring) dubbo容器本身提供启动类,可实现优雅关机 建议使用,线上线下都可使用

自建Main方法类运行spring容器,即为手动编写启动类:

import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-mybatis.xml");
		ctx.start();
		synchronized (test.class) {
			while(true) {
				try {
					test.class.wait();
				} catch (InterruptedException e) { 
					e.printStackTrace();
				}
			}
		}
	}
}

需要在spring配置文件中加载dubbo配置文件:

启动成功后,在dubbo-admin中可看到启动的服务。

五、使用maven生成可执行的dubbo服务jar包

上述,项目能放在tomcat中运行,成功发布服务并成功的在dubbo监控平台能看到,接下来使用maven打包jar包,直接运行jar包方式发布dubbo服务。

只需在上述的基础上稍作修改,添加maven build插件,正确的引入相关配置即可。

1、把打包方式改为jar包方式,修改packaging的值。

jar

2、添加build标签。


		tlshop
		
			
				${project.build.directory}/classes
				src/main/resources
				true
				
					**/*.xml
					**/*.properties
				
			
			
			
				${project.build.directory}/classes/META-INF/spring
				
				src/main/resources
				true
				
					spring-mvc.xml
				
			
		
		
		
		
			
			
				org.apache.maven.plugins
				maven-jar-plugin
				
					target/classes/
					
						
							com.alibaba.dubbo.container.Main
							
							false
							true
							lib/
						
						
							.
						
					
				
			
			
				org.apache.maven.plugins
				maven-dependency-plugin
				
					
						copy-dependencies
						package
						
							copy-dependencies
						
						
							jar
							jar
							false
							
								${project.build.directory}/lib
							
						
					
				
			
		
		 

3、注意加载配置文件方式,修改spring配置文件。

 
	

配置完,先在pom.xml中右键run as→maven clear,清理完成,再run as → maven install,即可在target下看到构建的jar包和其他文件。

如果install报jdk版本问题,见关于Maven项目build时出现No compiler is provided in this environment的处理。

如下图:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第9张图片

进target本地文件夹,删除其他文件,只保留jar包和lib文件夹,如下图:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第10张图片

使用windows窗口命令类启动运行这个jar包,cmd进target目录,运行

java -jar tlshop.jar &

需本地java环境,运行如下图:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第11张图片

运行成功,再次进入到dubbo-admin监控平台,可以看到成功发布的服务:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第12张图片


上述是在windows环境下,接下来,使用linux运行maven构建的可执行jar包,先安装虚拟机,配置好网络,可见本人博客vmware虚拟机安装和配置网络。

现在linux下安装好一个tomcat,方法可见这里,用于运行dubbo-admin监控平台。把tomcat和dubbo-admin拷贝至linux中,并且在linux中安装好zookeeper。

安装zookeeper只需要把zookeeper包拷贝进linux,如图:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第13张图片

拷贝zoo.cfg文件,修改值:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第14张图片

创建文件夹:

mkdir /tmp/zookeeper
mkdir /tmp/zookeeper/data
mkdir /tmp/zookeeper/log

配置环境变量:

export ZOOKEEPER_INSTALL=/root/zookeeper/zookeeper-3.3.6/
export PATH=$PATH:$ZOOKEEPER_INSTALL/bin

启动zookeeper,进入zookeeper的bin目录,运行启动脚本:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第15张图片

运行zookeeper成功之后,再来启动tomcat,跑dubbo-admin,把dubbo-admin拷贝进tomcat的webapps目录下,直接启动tomcat:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第16张图片

启动tomcat成功。

在浏览器中查看dubbo-admin运行效果:

普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包_第17张图片

运行成功,可以看到暂时没有任何服务。


接下来在linux中运行maven构建的可执行jar包,把maven构建好的tlshop.jar包和lib目录拷贝进linux中:

启动操作与windows下一致,使用java -jar tlshop.jar &就可以启动,启动成功后可以在dubbo-admin中看到发布的服务,也可以使用脚本来一键启动。

 

 

你可能感兴趣的:(普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包)