ApacheDubbo多语言系统再添新兵:第一个Rust语言版本正式发布Mesh系统提供丰富的服务治理能力。本文主要介绍了DubboRust项目的基本情况,通过实例快速体验Rust第一个正式版的特性,并给出了DubboRust社区的近期计划,适合关注的开发者和业务用户关于或学习Rust语言。完整的例子可以直接访问项目DubboRust快速入门官网或者搜索关注官方微信号公众号:ApacheDubbo1DubboRust简介Dubbo是Apache基金会最活跃的明星项目之一,也是国内最流行的开源微服务框架。它在易用性、高性能通信和服务治理方面具有很大优势。通过Dubbo3、DubboMesh等提供云原生友好的开发部署模型,同时Dubbo的多语言体系也发展迅速。长期以来,它提供了Java和Golang两种语言实现,对Rust、Node、Python、C++等语言实现的支持也正式在社区上线。Dubbo官网https://dubbo.apache.org/DubboJavahttps://github.com/apache/dubbo/DubboGolanghttps://github.com/apache/dub...DubboRusthttps://github.com/apache/dub...DubboRust旨在对齐Dubbo3的所有核心功能设计,包括基于HTTP/2的高性能通信、用户友好的微服务开发和编程模式,通过接入DubboMesh提供丰富的服务治理能力等,相比于其他语言实现,DubboRust会很好地利用Rust语言的极致性能、安全性和指令级控制能力。对于微服务框架,主流编程语言都有相应的实现,而DubboRust将填补Rust领域的空白:Golang:已经在微服务框架领域占据了非常重要的地位;dubbo-go已经出现在开源社区,gRPC、go-micro、go-zero等微服务框架Java:国内使用人数最多的编程语言,SpringCloud等优秀的微服务框架Dubbo已经非常流行C/C++:brpc、grpc等微服务框架Rust:目前还没有完善的微服务框架依托于Dubbo庞大的用户群和Dubbo体系下Mesh服务治理的整体规划。DubboRust可以方便的集成到现有的云原生研发体系中,而不会增加用户的研发负担。下图是社区介绍的DubboMesh架构设计。在上面的架构下,整体分为控制平面和数据平面两部分。其中,控制平面负责管理流量管理、地址发现、安全认证、可观察性等服务管理相关的配置信息管控工作,包括K8S等底层技术设施的对接;DubboRust作为数据面组件,负责接收来自控制面的配置;将配置应用于服务;并为服务提供基本的RPC通信能力。在架构设计方面,DubboRust将围绕Dubbo的核心设计和Rust语言的特点进行设计,将Dubbo框架的核心设计输出为文档,从而提高Dubbo框架的易用性。因此,DubboRust具有以下特点:易用性、高性能和可扩展性,同时为云原生提供了丰富的服务治理能力。2快速体验DubboRust2.1第一版的核心能力。DubboRust的第一个正式版本是v0.2.0。v0.2.0提供的能力包括基于HTTP/2Triple协议的基础通信能力,基于IDL的RPC定义支持,Protobuf生成代码,支持Serde序列化request-response,request/responsestreaming,bi-streaming通信模型支持设计简洁可扩展的架构,支持Listener、Connector、Filter、Protocol和Invoker组件的扩展DubboRustv0.2.0的核心组件和通信流程基本完成如下图所示。下个版本将重点关注核心组件的扩展和服务治理相关组件的设计与实现。2.2快速入门完整示例请参考【Dubbo官网】->【RustSDK文档】。https://dubbo.apache.org/zh/docs3-v2/rust-sdk/quick-start/使用DubboRust服务开发的基本步骤在使用IDL定义服务的项目中添加DubboRust依赖CompileIDL基于IDL生成compilationstubwriteServer&Clientlogicrunningproject使用IDL定义Dubb服务//./proto/greeter.protosyntax="proto3";optionjava_multiple_files=true;packageorg.apache.dubbo.sample.tri;//请求消息containingtheuser'sname.messageGreeterRequest{stringname=1;}//包含greetingsmessage的响应消息GreeterReply{stringmessage=1;}serviceGreeter{//unaryrpcgreet(GreeterRequest)returns(GreeterReply);}添加DubboRust依赖#。/Cargo.toml[package]name="example-greeter"version="0.1.0"edition="2021"[dependencies]dubbo="0.1.0"dubbo-config="0.1.0"[build-dependencies]dubbo-build="0.1.0"编译IDL,根据生成的stub编写逻辑编写DubboServer#[tokio::main]asyncfnmain(){register_server(GreeterServerImpl{name:"greeter".to_string(),});//Dubbo::new().start().await;Dubbo::new().with_config({letr=RootConfig::new();matchr.load(){Ok(config)=>config,Err(_err)=>panic!("err:{:?}",_err),//响应被丢弃}}).start().await;}structGreeterServerImpl{name:String,}implGreeterforGreeterServerImpl{asyncfngreet(&self,request:Request
