Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能 、 轻量级的开源 Java RPC框架 它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现 。
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的 RPC远程服务调用方案、 服务治理方案。
服务提供者 (Provider):暴露服务的服务提供方 服务提供者在启动时,向注册中心注
册自己提供的服务。
服务消费者 (Consumer):调用远程服务的服务消费方 服务消费者在启动时,向注册
中心订阅自己所需的服务 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一
台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry)注册中心返回服务提供者地址列表给消费者,如果有变更,注册
中心将基于长连接推送变更数据给消费者。
监控中心(Monitor)服务消费者和提供者,在内存中累计调用次数和调用时间,定时
每分钟发送一次统计数据到监控中心。
2.项目骨架搭建父项目:dubboparent
https://start.aliyun.com
接下来就一直往下点就可
2.2 dubbo子项目的创建后面创建子项目的过程和父项目相同
分别创建dubbo-api,dubbo-provider,dubbo-consumer
创建完成后删除.mvn,HELP.md,mvnw,mvnd.cmd等文件,结构如下:
展开如下:
到这里为止,项目的架构也就出来了。
3、模块关联完成了上面的步骤,各个模块还是相互独立。此时需要修改各个模块的pom.xml文件让他们关联起来。
3.1父项目dubboparent修改pom文件1.将父项目 packaging改为 pom
如果没有将packing 指定为pom ,那么子模块之间将无法正常的进行依赖传递。
我们执行的maven命令的时候将首先对父项目执行,而后当 父项目 的packing 类型为 pom 时,将对所有的子模块执行同样的命令,否则将无法执行同样的命令,那么依赖的传递将无法由maven 编译或者打包命令 得以执行。
总结:Maven-多模块项目的聚合,父项目必须将packing 指定 为 pom
2.添加总父项目为 springboot
3.添加父项目刚创建的各个模块
3.2子项目dubbo-api修改pom文件4.0.0 com.dubboscaffold dubboparent0.0.1-SNAPSHOT dubboparent Demo project for Spring Boot pom 1.8 UTF-8 UTF-8 2.3.7.RELEASE org.springframework.boot spring-boot-starter-parent2.2.1.RELEASE dubbo-api dubbo-provider dubbo-consumer org.springframework.boot spring-boot-starterorg.junit.jupiter junit-jupiter-api5.5.0 test org.springframework spring-core5.3.6 org.springframework.boot spring-boot-starter-testtest org.junit.vintage junit-vintage-engine
3.3子项目dubbo-provider修改pom文件4.0.0 com.dubboscaffold dubbo-api0.0.1-SNAPSHOT dubbo-api Demo project for Spring Boot 1.8 UTF-8 UTF-8 2.3.7.RELEASE com.dubboscaffold dubboparent0.0.1-SNAPSHOT ../pom.xml org.springframework.boot spring-boot-starterorg.springframework.boot spring-boot-starter-testtest org.junit.vintage junit-vintage-engine
3.4子项目dubbo-consumer修改pom文件4.0.0 com.dubboscaffold dubbo-provider0.0.1-SNAPSHOT dubbo-provider Demo project for Spring Boot 1.8 UTF-8 UTF-8 2.3.7.RELEASE com.dubboscaffold dubboparent0.0.1-SNAPSHOT ../pom.xml com.dubboscaffold dubbo-api0.0.1-SNAPSHOT com.alibaba.cloud spring-cloud-starter-dubboorg.apache.dubbo dubbo2.7.4.1 org.apache.dubbo dubbo-spring-boot-starter2.7.4.1 com.alibaba.nacos nacos-client1.2.1 org.apache.dubbo dubbo-registry-nacos2.7.4.1 org.springframework.boot spring-boot-starterorg.springframework.boot spring-boot-starter-testtest org.junit.vintage junit-vintage-engine
3.5刷新maven看是否有报错4.0.0 com.dubboscaffold dubbo-consumer0.0.1-SNAPSHOT dubbo-consumer Demo project for Spring Boot 1.8 UTF-8 UTF-8 2.3.7.RELEASE com.dubboscaffold dubboparent0.0.1-SNAPSHOT ../pom.xml com.dubboscaffold dubbo-api0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-web2.5.5 org.springframework.boot spring-boot-starterorg.apache.dubbo dubbo2.7.4.1 org.apache.dubbo dubbo-spring-boot-starter2.7.4.1 com.alibaba.nacos nacos-client1.2.1 org.apache.dubbo dubbo-registry-nacos2.7.4.1
如果有报错看看是不是直接复制进去的,因为是直接从网上拷贝过来粘贴在pom.xml中的可能格式会有冲突
3.6在父项目下编译整个项目当控制台出现如上图所示的结果,证明整个项目关联成功。
4、dubbo接入nacos的简单应用建立服务提供者,消费者,消费者通过nacos调用服务。
需要搭建提前将nacos环境搭好。快速搭建可以参考下文链接:
Nacos快速部署_六木老师的博客-CSDN博客
4.1 dubbo-api创建接口application.yml
spring:
application:
name: dubbo-api
TestService
package com.dubboscaffold.dubboapi.api;
public interface TestService {
String sayhello();
}
4.2 dubbo-provider创建服务
application.yml
spring:
application:
name: dubbo-provider
server:
port: 8081
# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
# Dubbo 应用配置
application:
name: user-service-provider # 应用名
# Dubbo 注册中心配
registry:
address: nacos://192.168.160.128:8848 # 注册中心地址
# Dubbo 服务提供者协议配置
protocol:
port: -1 # 协议端口。使用 -1 表示随机端口。
name: dubbo # 使用 `dubbo://` 协议。更多协议,可见 http://dubbo.apache.org/zh-cn/docs/user/references/protocol/introduction.html 文档
# Dubbo 服务提供者配置
provider:
timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
TestService:
version: 1.0.0
# 配置扫描 Dubbo 自定义的 @Service 注解,暴露成 Dubbo 服务提供者
scan:
base-packages: com.dubboscaffold.dubboprovider.service.impl
TestServiceImpl
package com.dubboscaffold.dubboprovider.service.impl;
import com.dubboscaffold.dubboapi.api.TestService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service(version = "${dubbo.provider.TestService.version}")
public class TestServiceImpl implements TestService {
@Override
public String sayhello() {
return "Hello Dubbo!!!";
}
}
4.3dubbo-consumer创建消费者
application.yml
spring:
application:
name: dubbo-consumer
server:
port: 8082
# dubbo 配置项,对应 DubboConfigurationProperties 配置类
dubbo:
# Dubbo 应用配置
application:
name: user-service-consumer # 应用名
# Dubbo 注册中心配置
registry:
address: nacos://192.168.160.128:8848 # 注册中心地址
# Dubbo 消费者配置
consumer:
timeout: 1000 # 【重要】远程服务调用超时时间,单位:毫秒。默认为 1000 毫秒
TestService:
version: 1.0.0
TestController
package com.dubboscaffold.dubboconsumer.controller;
import com.dubboscaffold.dubboapi.api.TestService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/test")
public class TestController {
@Reference(version = "${dubbo.consumer.TestService.version}")
private TestService testService;
@RequestMapping("/hello")
@ResponseBody
public String sayHello(){
return testService.sayhello();
}
}
4.4 项目启动
启动顺序:
1、dubbo-provider
2、dubbo-consumer
启动成功后可以在nacos管理页面(http://127.0.0.1:8848/nacos)进行查看,服务和消费者是否已经在上面可以查询到:
浏览器调用http://127.0.0.1:8082/test/hello
这样项目就成功运行了。
这样一个最基础的分布式dubbo+nacos脚手架就搭好了,后续还会继续整合其他组件。



