从零搭建Dubbo+spring boot分布式框架

随着流量的增大,常规的垂直框架已经逐渐无法应付,分布式框架应运而生,Dubbo是其中极有代表性的一个,今天我们来尝试手动搭建一个dubbo框架

本次搭建完成得框架开源仓库地址:https://github.com/lmz2559/dubbo_mini

Dubbo

从官网拿一张图来说明dubbo的架构,provider提供服务,在启动的时候向注册中心(中介)说明自己提供什么服务,consumer消费服务,启动的时候,向注册中心询问自己想要的服务。

从零搭建Dubbo+spring boot分布式框架_第1张图片

 搭建

我的搭建思路是有common为service提供依赖,service为provider与consumer提供依赖

从零搭建Dubbo+spring boot分布式框架_第2张图片

搭建开始:

1、下载zookeeper并启动(在此不详述)

2、新建一个maven项目,在maven项目下,创建四个module,分别是common、service、provider、consumer

从零搭建Dubbo+spring boot分布式框架_第3张图片

3、引入依赖

common:



	4.0.0
	com.lanly
	common
	1.0-SNAPSHOT
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.7.RELEASE
		 
	
	
		1.8
		2.7.3
	
	
		
		
			org.apache.commons
			commons-lang3
			3.6
		
		
			commons-io
			commons-io
			2.5
		
		
		
			com.alibaba
			fastjson
			1.2.54
		
		
			org.projectlombok
			lombok
			1.18.12
		


		
			org.springframework.boot
			spring-boot-starter-test

		

		
			org.apache.dubbo
			dubbo-spring-boot-starter
			${dubbo.version}
			
				
					org.slf4j
					slf4j-log4j12
				
			
		

		
			org.apache.dubbo
			dubbo
			${dubbo.version}
		

		
			org.apache.curator
			curator-framework
			4.0.1
		

		
			org.apache.curator
			curator-recipes
			2.8.0
		
	

service:将其依赖于common



	4.0.0
	com.heaboy
	service
	1.0-SNAPSHOT
	
        
		
			com.heaboy
			common
			1.0-SNAPSHOT
		
	

 provider:provider依赖于service

4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.7.RELEASE
         
    
    com.lanly
    provider
    0.0.1-SNAPSHOT
    provider
    Demo project for Spring Boot


    
        
            com.lanly
            service
            1.0-SNAPSHOT
        
        
            mysql
            mysql-connector-java
            runtime
        
  
      

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


consumer:consumer同样依赖于service



	4.0.0

	com.lanly
	consumer
	0.0.1-SNAPSHOT
	consumer
	Demo project for Spring Boot

	
		1.8
	
	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.7.RELEASE
		 
	
	
		
			com.lanly
			service
			1.0-SNAPSHOT
		
		
			org.springframework.boot
			spring-boot-starter-web
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	
	

4、为 provider与comsumer配置文档,与zookeeper建立连接

provider

#spring服务名
spring.application.name=lanly_provider
#dubbo服务名
dubbo.application.name=dubbo_provider
#注册中心配置
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181

dubbo.protocol.name=dubbo
#暴露服务地址
dubbo.protocol.port=20881
#扫描service实现类所在包
dubbo.scan.base-packages=com.lanly.provider.**.serviceImpl

consumer

#dubbo服务名
dubbo.application.name=dubbo_consumer
#注册中心配置
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181
#服务端口
server.port=8085

 

5、在service创建一个测试接口

package com.lanly.service.service;

public interface ITestService {
    void test();
}

6、在provider实现测试接口

注意这里使用的service注解是org.apache.dubbo包下的

package com.lanly.provider.serviceImpl;

import com.lanly.service.service.ITestService;
import org.apache.dubbo.config.annotation.Service;

@Service
public class TestServiceImpl implements ITestService {
    @Override
    public void test() {
        System.out.println("进入测试");
    }
}

 7、在consumer写一个测试controller

注意这里使用的reference注解是org.apache.dubbo包下的

package com.lanly.consumer.controller;

import com.lanly.service.service.ITestService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("")
public class TestController {
    @Reference
    private ITestService testService;

    @ResponseBody
    @RequestMapping("/test")
    public void test(){
        testService.test();
    }
}

8、为consumer与provider分别编写一个启动类(此处省略)

 

启动项目,打开zookeeper的UI插件,发现consumer和provider都已经与zookeeper建立了联系

从零搭建Dubbo+spring boot分布式框架_第4张图片

尝试访问controller,访问成功,provider的控制台打印出了我想要的

至此,本次实验完成。

 

 希望这篇文章能够帮到大家,如果我的文章有问题,欢迎批评指正。如果我有哪里说的不够清楚,也欢迎留言,我们一起讨论学习

你可能感兴趣的:(架构,Java)