dubbo 在Spring、SpringMvc、Springboot中混合使用

项目背景简介:

公司一个产品由多个项目组成,官网、微信公众号、小程序、运营后台、外部接口,刚开始为了快速开发和迭代,这些都是单独的项目,但是随着业务的不断扩展,这种开发方式出现了一些问题。
第一:业务相同模块重复开发,一旦需求变更维护成本很高;
        第二:数据库连接池资源有限,大规模部署集群难以实现;

    为了解决这些问题,我们使用服务的方式把通用的功能模块剥离出来单独开发,但是之前的项目有些用SpringMVC框架有些使用Springboot,经过研究我们用Spring容器来部署这些单独的服务,SpringMVC\Springboot作为服务消费者来调用服务提供者。

一、Spring+Dubbo作为服务提供方


1.dubbo-interface 在该项目中把服务要提供的接口放到里面,在本博客中我们模拟会员卡挂失逻辑,所以就把这个挂失抽象成接口,项目结构如下,项目访问地址:https://gitee.com/yanfaze/dubbo-demo



pom文件内容如下:

  4.0.0
  com.yan
  dubbo-interface
  0.0.1-SNAPSHOT
  
  
  	   
       javax.servlet   
       servlet-api   
       2.3  
       provided   
    
  

这里定义了一个挂失的接口,具体的实现在服务提供者中实现


package com.yan.service;

/**
 * 会员卡挂失
 * @author yan
 *
 */
public interface CardLoseService {
	public String lose(String cardNo);
}



2.dubbo-provider 该项目做为服务提供方,实现具体的会员卡挂失逻辑。项目结构如下,项目访问地址:https://gitee.com/yanfaze/dubbo-demo




pom文件文件内容如下:

  4.0.0
  com.yan
  dubbo-provide
  jar
  0.0.1
  
    
    
        4.0.4.RELEASE
        UTF-8 
        UTF-8 
  
  
     
	     com.yan
	     dubbo-interface
	     0.0.1-SNAPSHOT
     
  	 
      junit
      junit
      3.8.1
      test
    
  
	
	    log4j
	    log4j
	    1.2.17
	
	   
         javax.servlet   
         servlet-api   
         2.3  
    
  	
  	
	  
         org.springframework  
         spring-core  
         ${spring.version}  
      
      
         org.springframework  
         spring-web  
         ${spring.version}  
       
       
         org.springframework  
         spring-oxm  
         ${spring.version}  
       
       
         org.springframework  
         spring-tx  
         ${spring.version}  
     
     
	    org.springframework
	    spring-aspects
	    ${spring.version}
	  
        
          org.springframework  
          spring-jdbc  
          ${spring.version}  
        
        
          org.springframework  
          spring-webmvc  
          ${spring.version}  
        
        
          org.springframework  
          spring-aop  
          ${spring.version}  
        
        
          org.springframework  
          spring-context-support  
          ${spring.version}  
        
        
          org.springframework  
          spring-test  
          ${spring.version}  
      
     
      
  	 
		com.alibaba
		dubbo
		2.5.5
	 
	
		com.101tec
		zkclient
		0.10
	
  
  
  
  	
    
        org.apache.maven.plugins
        maven-shade-plugin
        1.2.1
        
            
                package
                
                        shade
                
                    
                        
                            
                                com.yan.Main
                            
                              
                                    META-INF/cxf/bus-extensions.txt  
                                  
                                  
                                    META-INF/spring.handlers  
                                  
                                  
                                    META-INF/spring.tooling  
                                  
                                  
                                    META-INF/spring.schemas  
                                
                            
                            
                            
                        
                    
            
        
     
  
  
  



ApplicationContext.xml文件内容如下:



	
	
	
		
	
	
	



provider.xml内容如下:



    
   
    
    
      
    
 
    
    
    
      
     
CardLoseServiceImpl 实现了具体的会员卡挂失逻辑,请注意这里的注解,为了后续扩展这里使用了dubbo的注解
package com.yan.service.impl;

import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.yan.service.CardLoseService;
@Component("cardLoseService")
@Service()
public class CardLoseServiceImpl implements CardLoseService{

	@Override
	public String lose(String cardNo) {
		System.out.println("会员卡挂失,卡号:"+cardNo);
		return "会员卡挂失,卡号:"+cardNo;
	}
	
}

这样服务提供方就好了,在实际环境中可以把该项目打包成jar文件,在服务器中启动

二、SpringMvc、Springboot+Dubbo作为服务消费方


1.dubbo-consumer 该项目作为服务消费者,使用了Springboot ,项目结构如下,项目访问地址:https://gitee.com/yanfaze/dubbo-demo




pom文件中内容如下:

  4.0.0
  com.itstyle.dubbo
  itstyle_springboot_dubbo_consumer
  jar
  0.0.1-SNAPSHOT
  
  springboot_dubbo_consumer
  http://maven.apache.org
  
    UTF-8
    1.7
  
  
  
  
	    org.springframework.boot
	    spring-boot-starter-parent
	    1.5.1.RELEASE
	    
  
  
  
        
        
			org.springframework.boot
			spring-boot-starter
		
		
	      org.springframework.boot
	      spring-boot-starter-web
	    
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
		     com.yan
		     dubbo-interface
		     0.0.1-SNAPSHOT
     	
		
			com.alibaba
			dubbo
			2.5.5
			
				
					spring
					org.springframework
				
			
		
        
		
			org.apache.zookeeper
			zookeeper
			3.4.6
			
				
					org.slf4j
					slf4j-log4j12
				
				
					log4j
					log4j
				
			
		
        
		
			com.101tec
			zkclient
			0.6
		
		
		
		    org.javassist
		    javassist
		
  
  
		
		    
			
				org.springframework.boot
				spring-boot-maven-plugin
				
				    
                    
                        org.springframework
                        springloaded
                        1.4.0.RELEASE
                     
                
			
		
	


consumer.xml文件中内容如下:




    
    

    
    
    
	
    
    
application.properties文件内容如下:
server.context-path=/consumer
server.error.path=/error
server.port=8081
server.session-timeout=60
server.tomcat.max-threads=800
server.tomcat.uri-encoding=UTF-8
dubbo.registry.address=127.0.0.1:2181
logging.level.root=INFO

Main 项目启动类

package com.yan;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.yan.service.CardLoseService;
/**
 * @author yfz
 */
@SpringBootApplication
@EnableAutoConfiguration
@ImportResource({"classpath:consumer.xml"})
@Controller
public class Main  {
	private static final Logger logger = Logger.getLogger(Main.class);
	@Autowired
	private CardLoseService cardLoseService;
	@RequestMapping("/")
	@ResponseBody
    public String   greeting() {
        return cardLoseService.lose("8888888");
    }
	public static void main(String[] args) throws InterruptedException {
		SpringApplication.run(Main.class, args);
		logger.info("项目启动 ");
	}
}



到此项目基本完成,还有一个SpringMVC作为服务消费放的项目下次有时间在贴进来。

项目运行效果如下:
dubbo 在Spring、SpringMvc、Springboot中混合使用_第1张图片


上图中是服务提供方
dubbo 在Spring、SpringMvc、Springboot中混合使用_第2张图片



上图是服务消费方


程序执行结果如上图

特别说明以上项目中设计的bean都是写在配置文件中,便于理解,实际生产中可以使用注解的形式

你可能感兴趣的:(dubbo)