大家好,我是github TOP君,每天介绍github上最有价值的项目,希望您关注
今天介绍 dubbo: RPC 和 微服务框架
JAVA 实现的源代码 github地址:
https://github.com/apache/dubbo

微服务框架是一种用于构建和管理微服务架构的应用程序开发工具。
微服务架构是一种将一个大型、复杂的应用程序拆分为多个小型、独立的服务,以实现更高效、灵活的软件开发和运维。这些服务之间通过轻量级的通信协议进行交互,形成一个松耦合的分布式系统。微服务框架旨在简化开发者在构建微服务应用时的工作负担,提供一套统一的管理和治理能力。
以下是一些常见的微服务框架:
1. Apache Dubbo:一款高性能、轻量级的微服务框架,提供服务注册与发现、负载均衡、熔断降级等功能,支持多种编程语言。
2. Spring Cloud:基于 Spring 框架的微服务开发工具集,包括服务注册与发现、负载均衡、分布式配置等功能,支持 Java 语言。
3. gRPC:Google 开源的高性能、通用的远程过程调用(RPC)框架,支持多种编程语言,适用于构建高性能的分布式系统。
4. Service Mesh:一种新兴的微服务治理框架,将网络通信、服务注册与发现、熔断降级等复杂逻辑从应用层解耦,放到独立的代理层处理,以提高系统的可扩展性和可维护性。
5. Istio:一个开源的 Service Mesh 框架,支持多种编程语言和云平台,提供丰富的治理能力,如服务代理、流量控制、故障注入等。
6. Diaophp:一款原生 PHP 开发的微服务框架,支持 Dubbo 协议,提供简洁、易用的开发接口,适用于 PHP 开发者。
总之,微服务框架帮助开发者更高效地构建和管理分布式系统,实现服务之间的轻量级通信和协同,同时提供丰富的治理能力,以满足不同场景下的业务需求。在实际项目中,开发者可以根据项目需求和技术背景选择合适的微服务框架。

Apache Dubbo(Apache Dubbo,简称 Dubbo)是一款高性能、轻量级的微服务框架,用于构建易于扩展、高性能、高可靠的服务化应用程序。Dubbo 旨在提供一套简洁、易用、高效的服务治理解决方案,帮助开发者在构建分布式系统时,实现服务之间的通信、服务注册与发现、负载均衡、熔断降级等功能。
Dubbo 的主要特点如下:
1. 高性能:Dubbo 采用了高效的通信协议和序列化技术,如 gRPC、Protocol Buffers 等,以降低网络传输的开销,提高系统性能。
2. 轻量级:Dubbo 的设计遵循“简单、易用”的原则,框架本身的依赖较少,对系统的侵入性较低,易于集成和使用。
3. 服务治理:Dubbo 提供了服务注册与发现、负载均衡、熔断降级等功能,帮助开发者轻松构建高可用的分布式系统。
4. 多语言支持:Dubbo 支持多种编程语言,如 Java、Python、Go、Rust 等,满足不同开发者的需求。
5. 完善的生态:Dubbo 拥有丰富的插件和扩展,可以与其他主流的云原生技术(如 Kubernetes、Service Mesh 等)无缝集成,为开发者提供完整的解决方案。
Apache Dubbo 的首个 Rust 语言版本于 2022 年 11 月正式发布,进一步丰富了 Dubbo 的多语言体系,为开发者提供了更多选择。总之,Apache Dubbo 是一款优秀的微服务框架,适用于各类分布式系统开发场景。
JAVA 实现的源代码 github地址:
https://github.com/apache/dubbo
架构图

特征
基于透明接口的RPC
智能负载均衡
自动服务注册和发现
高扩展性
运行时流量路由
可视化服务治理
入门
以下代码片段来自Dubbo Samples。您可以克隆示例项目并进入dubbo-samples-api子目录,然后再继续。
git clone https://github.com/apache/dubbo-samples.git
cd dubbo-samples/1-basic/dubbo-samples-api
目录下有一个READMEdubbo-samples-api文件。我们建议按照以下说明引用该目录中的示例:
Maven 依赖
<properties>
<dubbo.version>3.2.5</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
定义服务接口
package org.apache.dubbo.samples.api;
public interface GreetingsService {
String sayHi(String name);
}
请参阅GitHub 上的api/GreetingsService.java。
为提供者实现服务接口
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.samples.api.GreetingsService;
public class GreetingsServiceImpl implements GreetingsService {
@Override
public String sayHi(String name) {
return "hi, " + name;
}
}
请参阅GitHub 上的provider/GreetingsServiceImpl.java。
启动服务提供者
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.samples.api.GreetingsService;
import java.util.concurrent.CountDownLatch;
public class Application {
private static String zookeeperHost = System.getProperty("zookeeper.address", "127.0.0.1");
public static void main(String[] args) throws Exception {
ServiceConfig<GreetingsService> service = new ServiceConfig<>();
service.setApplication(new ApplicationConfig("first-dubbo-provider"));
service.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181"));
service.setInterface(GreetingsService.class);
service.setRef(new GreetingsServiceImpl());
service.export();
System.out.println("dubbo service started");
new CountDownLatch(1).await();
}
}
请参阅GitHub 上的provider/Application.java。
构建并运行提供程序
mvn clean package
mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.samples.provider.Application exec:java
在消费者中调用远程服务
package org.apache.dubbo.samples.client;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.samples.api.GreetingsService;
public class Application {
private static String zookeeperHost = System.getProperty("zookeeper.address", "127.0.0.1");
public static void main(String[] args) {
ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
reference.setApplication(new ApplicationConfig("first-dubbo-consumer"));
reference.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181"));
reference.setInterface(GreetingsService.class);
GreetingsService service = reference.get();
String message = service.sayHi("dubbo");
System.out.println(message);
}
}
请参阅GitHub 上的client/Application.java。
构建并运行消费者
mvn clean package
mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.samples.client.Application exec:java
消费者将hi, dubbo在屏幕上打印出来。
下一步
你的第一个 Dubbo 应用程序- 揭示更多细节的 101 教程,代码与上面相同。
Dubbo 用户手册- 如何使用 Dubbo 及其所有功能。
Dubbo 开发者指南- 如何参与 Dubbo 开发。
Dubbo 管理手册- 如何管理和管理 Dubbo 服务。
Building
如果您想尝试前沿功能,可以使用以下命令进行构建。(构建master分支需要Java 1.8)
mvn clean install
推荐测试环境
为了避免间歇性测试失败(即不稳定的测试),建议拥有具有以下规格的机器或虚拟机:
至少 2 个 CPU。
至少 2Gb RAM。
JAVA 实现的源代码 github地址:
https://github.com/apache/dubbo

