Rust 语言开发微服务(Dubbo)

这篇具有很好参考价值的文章主要介绍了Rust 语言开发微服务(Dubbo)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.介绍

Dubbo Rust 近期发布了首个正式版本,Dubbo Rust 目标是对齐 Dubbo 3 的所有核心功能设计,包括基于 HTTP/2 的高性能通信、用户友好的微服务开发编程模式、通过接入Dubbo Mesh提供丰富的服务治理能力等。相比于其他语言实现,Dubbo Rust 将很好的利用 Rust 语言极致性能、安全和指令级掌控能力的特点。

前置条件
安装 Rust 开发环境
安装 protoc 工具

2.使用 IDL 定义 Dubbo 服务

Greeter 服务定义如下,包含一个 Unary(Request - Response)模型的 Dubbo 服务。


// ./proto/greeter.proto
syntax = "proto3";

option java_multiple_files = true;

package org.apache.dubbo.sample.tri;

// The request message containing the user's name.
message GreeterRequest{
  string name = 1;
}

// The response message containing the greetings
message GreeterReply {
  string message = 1;
}

service Greeter{
  // unary
  rpc greet(GreeterRequest) returns (GreeterReply);
}

3.添加 Dubbo-Rust 及相关依赖到项目


# ./Cargo.toml
[package]
name = "example-greeter"
version = "0.1.0"
edition = "2021"

[[bin]]
name = "greeter-server"
path = "src/greeter/server.rs"

[[bin]]
name = "greeter-client"
path = "src/greeter/client.rs"

[dependencies]
http = "0.2"
http-body = "0.4.4"
futures-util = {version = "0.3", default-features = false}
tokio = { version = "1.0", features = [ "rt-multi-thread", "time", "fs", "macros", "net", "signal"] }
prost-derive = {version = "0.10", optional = true}
prost = "0.10.4"
async-trait = "0.1.56"
tokio-stream = "0.1"

dubbo = "0.2.0"
dubbo-config = "0.2.0"

[build-dependencies]
dubbo-build = "0.2.0"

4.配置 Dubbo - Build 编译 IDL

在项目根目录创建(注意不是 src 目录),创建 build.rs 文件并添加以下内容:

// ./build.rs
fn main() {
    dubbo_build::prost::configure()
        .compile(&["proto/greeter.proto"], &["proto/"])
        .unwrap();
}

这样配置之后,编译项目就可以生成 Dubbo Stub 相关代码。
路径一般在:

./target/debug/build/example-greeter/out/org.apache.dubbo.sample.tri.rs

5.编写 Dubbo 业务代码

5.1.编写 Dubbo Server

// ./src/greeter/server.rs
use ...

#[tokio::main]
async fn main() {
    register_server(GreeterServerImpl {
        name: "greeter".to_string(),
    });

    // Dubbo::new().start().await;
    Dubbo::new()
        .with_config({
            let r = RootConfig::new();
            match r.load() {
                Ok(config) => config,
                Err(_err) => panic!("err: {:?}", _err), // response was droped
            }
        })
        .start()
        .await;
}

#[allow(dead_code)]
#[derive(Default, Clone)]
struct GreeterServerImpl {
    name: String,
}

// #[async_trait]
#[async_trait]
impl Greeter for GreeterServerImpl {
    async fn greet(
        &self,
        request: Request<GreeterRequest>,
    ) -> Result<Response<GreeterReply>, dubbo::status::Status> {
        println!("GreeterServer::greet {:?}", request.metadata);

        Ok(Response::new(GreeterReply {
            message: "hello, dubbo-rust".to_string(),
        }))
    }
}

5.2.配置 dubbo.yaml

dubbo.yaml 指示 Server 端的配置,包括暴露的服务列表、协议配置、监听配置等。

# ./dubbo.yaml
name: dubbo
service:
  org.apache.dubbo.sample.tri.Greeter:
    version: 1.0.0
    group: test
    protocol: triple
    registry: ''
    serializer: json
    protocol_configs:
      triple:
        ip: 0.0.0.0
        port: '8888'
        name: triple
protocols:
  triple:
    ip: 0.0.0.0
    port: '8888'
    name: triple

5.3.编写 Dubbo Client

// ./src/greeter/client.rs
use ...

#[tokio::main]
async fn main() {
    let mut cli = GreeterClient::new().with_uri("http://127.0.0.1:8888".to_string());

    println!("# unary call");
    let resp = cli
        .greet(Request::new(GreeterRequest {
            name: "message from client".to_string(),
        }))
        .await;
    let resp = match resp {
        Ok(resp) => resp,
        Err(err) => return println!("{:?}", err),
    };
    let (_parts, body) = resp.into_parts();
    println!("Response: {:?}", body);
}

6.运行并总结

6.1编译

执行 cargo build 来编译 Server 和 Client。

6.2运行 Server

执行 ./target/debug/greeter-server 来运行 Server,如上文 dubbo.yaml 所配置,Server 会监听 8888 端口,并以 triple 协议提供 RPC 服务。

$ ./target/debug/greeter-server
2022-09-28T23:33:28.104577Z  INFO dubbo::framework: url: Some(Url { uri: "triple://0.0.0.0:8888/org.apache.dubbo.sample.tri.Greeter", protocol: "triple", location: "0.0.0.0:8888", ip: "0.0.0.0", port: "8888", service_key: ["org.apache.dubbo.sample.tri.Greeter"], params: {} })

6.3运行 Client,验证调用是否成功

执行 ./target/debug/greeter-client 来运行 Client,调用triple://127.0.0.1:8888/org.apache.dubbo.sample.tri.Greeter 下的各种方法。文章来源地址https://www.toymoban.com/news/detail-521382.html

$ ./target/debug/greeter-client
Response: GreeterReply { message: "hello, dubbo-rust" }

到了这里,关于Rust 语言开发微服务(Dubbo)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip

    1. 在写分布式im时nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate(长连接服务) logic (业务) lsb (负载均衡)store(存储) - Gitee.com,需要指定某一长连接服务调用,其他博客得都调不通,写的有问题。要不就是通过xml进行配置,本文主要是以代码形式,调用前 配

    2024年02月15日
    浏览(47)
  • 【Dubbo核心 详解三】Dubbo服务接口的详解

    ✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Dubbo专栏 本文将介绍 Dubbo 服务接口的基本概念和特点,实现方式和应用场景,以及注册与发现、调用、属性和参数、异常处理、日志和监控、高级特性、微

    2023年04月24日
    浏览(82)
  • Dubbo 3.x源码(16)—Dubbo服务发布导出源码(5)

    基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo 3.x源码(15)—Dubbo服务发布导出源码(4),也就是Dubbo远程服务导出export方法的上半部分,也就是doLocalExport源码,将会得到一个Exporter。 现在我们继续学习,在导出远程服务得到Exporter之后,继续通过R

    2024年01月25日
    浏览(47)
  • Golang vs Rust ——服务端编程应该选择哪种语言

    为服务端编程选择一种语言应该基于你的长期目标和项目的要求,因此,盲目地问我应该雇用 Go 开发人员还是应该选择 Rust 进行开发并不能帮助你解决问题。 然而,如果你发现自己陷入了困境,那么这篇文章将为你解惑。下面让我们开始吧。 Go 是一种静态类型的、AOT 编译的

    2024年02月02日
    浏览(62)
  • 【Dubbo3云原生微服务开发实战】「Dubbo前奏导学」 RPC服务的底层原理和实现

    Dubbo是一款高效而强大的RPC服务框架,它旨在解决微服务架构下的服务监控和通信问题。该框架提供了Java、Golang等多语言的SDK,使得使用者可以轻松构建和开发微服务。Dubbo具备远程地址发现和通信能力,可通过Dubbo独有的身临其境的服务治理特验为主导,以提高开发人员的功

    2024年02月05日
    浏览(49)
  • Dubbo服务启动报错

    最近在优化Dubbo项目过程中遇到了一下问题,在启动dubbo时报一下错误 Linux环境 + Dubbo 2.5.3 java.lang.IllegalArgumentException: Invalid registry store file /pub/.dubbo/dubbo-registry-224.5.6.7.cache, cause: Failed to create directory /pub/.dubbo! 一个服务有多个应用有用到dubbo的时候更新注册中心的本地缓存,在

    2024年02月14日
    浏览(48)
  • 【微服务生态】Dubbo

    Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。对标Spring Cloud 中的 OpenFeign但功能更丰富,含限流、降级、熔断,另外可搭配 Hystrix 使用。一般搭配注册中心 ZooKeeper 使用。

    2024年02月21日
    浏览(35)
  • Spring Cloud Alibaba【OpenFeign实现服务降级、Dubbo实现服务生产者、 Dubbo消费者调用接口 】(三)

    目录 服务调用_OpenFeign实现服务降级 服务调用_Dubbo实现服务生产者 

    2024年02月17日
    浏览(49)
  • Rust编程语言入门之最后的项目:多线程 Web 服务器

    在 socket 上监听 TCP 连接 解析少量的 HTTP 请求 创建一个合适的 HTTP 响应 使用线程池改进服务器的吞吐量 优雅的停机和清理 注意:并不是最佳实践 创建项目 main.rs 文件 修改一: 修改二: 修改三: 修改四: 修改五: hello.html 文件 404.html 文件 单线程Web服务器 开启线程 lib.r

    2023年04月25日
    浏览(58)
  • 微服务事务管理(Dubbo)

    Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 可在此查看本示例完整代码地址:dubbo-samples-seata 用户采购商品业务,整个业务包含3个微服务

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包