Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。
在云原生时代,Dubbo 相继衍生出了 Dubbo3、Proxyless Mesh 等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。
dubbo的开源小故事。
Apache Dubbo 最初是为了解决阿里巴巴内部的微服务架构问题而设计并开发的,在十多年的时间里,它在阿里巴巴公司内部的很多业务系统的到了非常广泛的应用。最早在 2008 年,阿里巴巴就将 Dubbo 捐献到开源社区,它很快成为了国内开源服务框架选型的事实标准框架,得到了业界更广泛的应用。
在 2017 年,Dubbo 被正式捐献 Apache 软件基金会并成为 Apache 顶级项目,开始了一段新的征程。
1.快速易用
无论你是计划采用微服务架构开发一套全新的业务系统,还是准备将已有业务从单体架构迁移到微服务架构,Dubbo 框架都可以帮助到你。Dubbo 让微服务开发变得非常容易,它允许你选择多种编程语言、使用任意通信协议,并且它还提供了一系列针对微服务场景的开发、测试工具帮助提升研发效率
2.超高性能
高性能数据传输
构建可伸缩的微服务集群
3.服务治理
提供了:
参考文档
- dubbo官方文档(dubbo*springboot快速开始)
如果端口都是默认的话,直接启动就好了(可以在idea直接启动,也可以使用java -jar 命令启动 springboot,别用jdk17会报错)
打开? 打不开! 哈哈哈, 因为不是成品项目,需要自行编译运行前端vue项目
记得cd到ui的目录里,如果没有相关环境,可以搜索vue文章,安装下vue3的相关环境。
2. 安装相关依赖
npm i
npm run dev
创建父工程。
<properties>
<dubbo.version>3.2.0-beta.4dubbo.version>
<spring-boot.version>2.7.8spring-boot.version>
<maven.compiler.source>17maven.compiler.source>
<maven.compiler.target>17maven.compiler.target>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-bomartifactId>
<version>${dubbo.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-dependencies-zookeeper-curator5artifactId>
<version>${dubbo.version}version>
<type>pomtype>
dependency>
dependencies>
dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>${spring-boot.version}version>
plugin>
plugins>
pluginManagement>
build>
public interface DemoService {
String sayHello(String name);
}
1. 创建模块 (我这里提供者单词拼错了,。。。不过问题不大,先凑合着用)
这里需要注意的是吧接口maven依赖地址修改成你自己接口模块maven的地址
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-spring-boot-interfaceartifactId>
<version>${project.parent.version}version>
dependency>
<dependencies>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-spring-boot-interfaceartifactId>
<version>${project.parent.version}version>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-dependencies-zookeeper-curator5artifactId>
<type>pomtype>
<exclusions>
<exclusion>
<artifactId>slf4j-reload4jartifactId>
<groupId>org.slf4jgroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
dependencies>
@DubboService
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "Hello " + name;
}
}
3. 服务端(提供者)配置链接配置:
dubbo:
application:
name: dubbo-springboot-demo-provider
protocol:
name: dubbo
port: -1
registry:
address: zookeeper://${zookeeper.address:127.0.0.1}:2181
由于我的zookeeper都是默认值,所以直接这样配置就可以,可以按照自己的配置进行设置
3. 消费者配置链接配置:
@Component
public class Task implements CommandLineRunner {
@DubboReference
private DemoService demoService;
@Override
public void run(String... args) throws Exception {
String result = demoService.sayHello("world");
System.out.println("Receive result ======> " + result);
new Thread(()-> {
while (true) {
try {
Thread.sleep(1000);
System.out.println(new Date() + " Receive result ======> " + demoService.sayHello("world"));
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
}
}).start();
}
}
不过在没有进行整理的情况下,需要启动的服务倒是不少,这里简单梳理一下。