随着流量的增大,常规的垂直框架已经逐渐无法应付,分布式框架应运而生,Dubbo是其中极有代表性的一个,今天我们来尝试手动搭建一个dubbo框架
本次搭建完成得框架开源仓库地址:https://github.com/lmz2559/dubbo_mini
从官网拿一张图来说明dubbo的架构,provider提供服务,在启动的时候向注册中心(中介)说明自己提供什么服务,consumer消费服务,启动的时候,向注册中心询问自己想要的服务。
我的搭建思路是有common为service提供依赖,service为provider与consumer提供依赖
1、下载zookeeper并启动(在此不详述)
2、新建一个maven项目,在maven项目下,创建四个module,分别是common、service、provider、consumer
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建立了联系
尝试访问controller,访问成功,provider的控制台打印出了我想要的
至此,本次实验完成。
希望这篇文章能够帮到大家,如果我的文章有问题,欢迎批评指正。如果我有哪里说的不够清楚,也欢迎留言,我们一起讨论学习