大数跨境
0
0

GitHub顶级开源项目dubbo: RPC 和 微服务框架——java的实现版本

GitHub顶级开源项目dubbo: RPC 和 微服务框架——java的实现版本 GitHubTopp
2023-11-08
0
导读:大家好,我是github TOP君,每天介绍github上最有价值的项目,希望您关注今天介绍 dubbo:

大家好,我是github TOP君,每天介绍github上最有价值的项目,希望您关注

今天介绍 dubbo: RPC 和 微服务框架

JAVA 实现的源代码 github地址:

https://github.com/apache/dubbo

微服务框架是一种用于构建和管理微服务架构的应用程序开发工具


微服务架构是一种将一个大型、复杂的应用程序拆分为多个小型、独立的服务,以实现更高效、灵活的软件开发和运维。这些服务之间通过轻量级的通信协议进行交互,形成一个松耦合的分布式系统。微服务框架旨在简化开发者在构建微服务应用时的工作负担,提供一套统一的管理和治理能力。

以下是一些常见的微服务框架:

1. Apache Dubbo:一款高性能、轻量级的微服务框架,提供服务注册与发现、负载均衡、熔断降级等功能,支持多种编程语言。

2. Spring Cloud:基于 Spring 框架的微服务开发工具集,包括服务注册与发现、负载均衡、分布式配置等功能,支持 Java 语言。

3. gRPCGoogle 开源的高性能、通用的远程过程调用(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


【声明】内容源于网络
0
0
GitHubTopp
top开源系统分享
内容 444
粉丝 0
GitHubTopp top开源系统分享
总阅读124
粉丝0
内容444