Rust.cc

Rust.cc -

krpc-rust v0.2.0 发布,兼容Dubbo协议支持服务注册与发现

krpc-rust 一个最像RPC框架的Rust-RPC框架 krpc-rust是一个高性能,轻量级的rpc框架,通过使用Rust宏来解决目前主流rpc框架使用复杂,性能低等问题,不需要通过脚本和脚手架生成rpc调用代码,通过宏来进行编译期"反射"来实现高性能的调用,来满足rpc调用的简易性,同时支持Dubbo3服务的注册发现和互相调用; 快速开始 Server #[derive(Serialize, Deserialize, Default, Debug)] struct ReqDto { name: String, } #[derive(Serialize, Deserialize, Default, Debug)] struct ResDto { res: String, } #[derive(Clone)] struct DemoService { _db: String, } krpc_server! { //设置包路径 "org.apache.dubbo.springboot.demo", //设置service-name DemoService, //设置service-versions None, async fn sayHello(&self,req : String) -> Result<String> { info!("res : {:?}" ,req); return Ok("Hello ".to_owned() + &req); } async fn sayHelloV2(&self,req : ReqDto) -> Result<ResDto> { info!("res : {:?}" ,req); return Ok(ResDto{res : "Hello ".to_owned() + &req.name + " V2"}); } } #[tokio::main(worker_threads = 512)] async fn main() { krpc_common::init_log(); let server: DemoService = DemoService { _db: "我是一个DB数据库".to_string(), }; KrpcServer::build( //配置注册中心 RegisterBuilder::new( &format!("127.0.0.1:{}", "2181"), "default", RegisterType::ZooKeeper, ), //设置监听端口 "8081", ) .add_rpc_server(Box::new(server)) .run() .await; } Client //初始化KrpcClient lazy_static! { static ref CLI: KrpcClient = KrpcClient::build( //配置注册中心 RegisterBuilder::new( &format!("127.0.0.1:{}", "2181"), "default", RegisterType::ZooKeeper, ) ); } #[derive(Serialize, Deserialize, Default, Debug)] struct ReqDto { name: String, } #[derive(Serialize, Deserialize, Default, Debug)] struct ResDto { res : String, } struct DemoService; //声明Rpc接口 krpc_client! { CLI, //设置API包路径 "org.apache.dubbo.springboot.demo", //设置service-name DemoService, //设置service-versions None, async fn sayHello(&self,req : String) -> Result<String> async fn sayHelloV2(&self,req : ReqDto) -> Result<ResDto> } #[tokio::main(worker_threads = 512)] async fn main() { krpc_common::init_log(); let client = DemoService; let res = client.sayHello("world".to_string()).await; info!("{:?}",res); let res = client.sayHelloV2(ReqDto{name:"world".to_string()}).await; info!("{:?}",res); } Dubbo3 本项目同时兼容dubbo3协议,可以很方便的与Java版本的Dubbo3项目通过接口暴露的方式进行服务注册发现和互调。 Rust的Server和Client完全不用改造就如上示例即可。 Java版本的Dubbo3项目,代码层面不需要改造,只需要添加一些依赖和配置(因Dubbo3使用接口暴露的方式默认不支持json序列化协议,而是采用fastjson2的二进制序列化格式,所以这里我们需手动添加fastjson1的支持) 这里我们使用duboo3的官方示例dubbo-samples-spring-boot项目进行演示 https://github.com/apache/dubbo-samples 首先我们需要把Server和Client的服务的pom.xml都添加fastjson1的maven依赖 <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-serialization-fastjson</artifactId> <version>2.7.23</version> </dependency> Java-Server @DubboService public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello " + name; } } Server-application.yml dubbo: application: name: dubbo-springboot-demo-provider protocol: name: tri port: 50052 //添加fastjson的支持 prefer-serialization: fastjson registry: address: zookeeper://${zookeeper.address:127.0.0.1}:2181 Java-Client @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(); } } Client-application.yml dubbo: application: name: dubbo-springboot-demo-consumer registry: address: zookeeper://${zookeeper.address:127.0.0.1}:2181

krpc-rust是一个高性能、轻量级的Rust-RPC框架,通过使用Rust宏来解决主流RPC框架的复杂性和性能低下的问题。它支持Dubbo3服务的注册发现和互相调用。使用示例展示了如何快速开始使用该框架。此外,krpc-rust还兼容Dubbo3协议,可以与Java版本的Dubbo3项目进行服务注册发现和互调。

rust 协议

相关推荐 去reddit讨论

热榜 Top10

观测云
观测云
Dify.AI
Dify.AI
eolink
eolink
LigaAI
LigaAI

推荐或自荐