精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用Rust語言開發微服務

jf_wN0SrCdH ? 來源:Apache Dubbo ? 作者:Dubbo Rust 社區 ? 2022-10-28 09:31 ? 次閱讀

Dubbo Rust 近期發布了首個正式版本,Dubbo Rust 目標是對齊 Dubbo 3 的所有核心功能設計,包括基于 HTTP/2 的高性能通信、用戶友好的微服務開發編程模式、通過接入Dubbo Mesh提供豐富的服務治理能力等。相比于其他語言實現,Dubbo Rust 將很好的利用 Rust 語言極致性能、安全和指令級掌控能力的特點。

1?

前置條件

安裝 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::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,
    ) -> Result, dubbo::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-28T2328.104577Z  INFO dubbo: 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 下的各種方法。

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • HTTP
    +關注

    關注

    0

    文章

    501

    瀏覽量

    31075
  • IDL
    IDL
    +關注

    關注

    0

    文章

    19

    瀏覽量

    7640
  • rust語言
    +關注

    關注

    0

    文章

    57

    瀏覽量

    3006

原文標題:用 Rust 語言開發微服務:Dubbo Rust 首個正式版本初體驗

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于Rust語言Hash特征的基礎用法和進階用法

    Rust語言是一種系統級編程語言,具有高性能、安全、并發等特點,是近年來備受關注的新興編程語言。在Rust
    的頭像 發表于 09-19 16:02 ?1386次閱讀

    Rust語言如何與 InfluxDB 集成

    Rust 是一種系統級編程語言,具有高性能和內存安全性。InfluxDB 是一個開源的時間序列數據庫,用于存儲、查詢和可視化大規模數據集。Rust 語言可以與 InfluxDB 集成,
    的頭像 發表于 09-30 16:45 ?1111次閱讀

    如何用 rust 語言開發 stm32

    本文介紹如何用 rust 語言開發 stm32。開發平臺為 linux(gentoo)。硬件準備本文使用的芯片為 STM32F103C8T6。該芯片性價比較高,價格低廉,適合入門學習。
    發表于 11-26 06:20

    微服務網關gateway的相關資料推薦

    目錄微服務網關 gateway 概述[路由器網關 Zuul 概述]嵌入式 Zuul 反向代理微服務網關 gateway 概述1、想象一下一個購物應用程序的產品詳情頁面展示了指定商品的信息:2、若是
    發表于 12-23 08:19

    java微服務架構有哪些

    本文首先簡單介紹了微服務的概念以及使用微服務所能帶來的優勢,然后結合實例介紹了幾個常見的Java微服務框架。微服務開發領域的應用越來越廣泛
    的頭像 發表于 02-09 10:34 ?8626次閱讀
    java<b class='flag-5'>微服務</b>架構有哪些

    微服務優勢_微服務架構的好處與不足

    是相互獨立的,所以不同的服務可以使用不同的語言開發,或者根據業務的需求使用不同類型的數據庫。總而言之,微服務架構有很多吸引人的地方,不過在擁抱微服
    發表于 02-23 11:24 ?4388次閱讀

    Python微服務開發的源代碼合集免費下載

    本文檔的主要內容詳細介紹的是Python微服務開發的源代碼合集免費下載。
    發表于 09-20 08:00 ?3次下載

    微軟開發基于Rust的新編程語言,將很快開源

    此前,微軟表示正探索將Rust作為C和C++的安全替代方案,并且也對外展示了使用Rust重寫Windows組件的體驗,根據微軟的說法,Rust是一種從根本上考慮安全性的編程語言,他們將
    的頭像 發表于 12-03 10:36 ?3895次閱讀

    一個Rust開發的壓測工具rsb

    一個 Rust 開發的壓測工具,項目地址:rsb,給個 star 鼓勵下。
    的頭像 發表于 03-21 09:32 ?856次閱讀

    微服務為什么要用到API網關?

    微服務架構(通常簡稱為微服務)是指開發應用所用的一種架構形式。通過微服務,可將大型應用分解成多個獨立的組件,其中每個組件都有各自的責任領域。
    的頭像 發表于 04-14 09:17 ?721次閱讀

    適合嵌入式設備開發的編程語言Rust語言

    Rust語言是二十一世紀的語言新星。Rust被人廣泛承認的一點,就是因為它能運行在多樣的目標上,從桌面和服務器設備,到資源有限的嵌入式設備。
    發表于 09-12 09:39 ?2874次閱讀
    適合嵌入式設備<b class='flag-5'>開發</b>的編程<b class='flag-5'>語言</b>—<b class='flag-5'>Rust</b><b class='flag-5'>語言</b>

    基于Rust開發的編程語言

    Move 是一門由 Rust 語言開發的一門面向資產的編程語言,最早由 Facebook (現 Meta )投入大量的人力物力開發,用于 L
    的頭像 發表于 11-17 12:30 ?656次閱讀

    springcloud微服務架構

    Spring Cloud是一個開源的微服務架構框架,它提供了一系列工具和組件,用于構建和管理分布式系統中的微服務。它基于Spring框架,旨在通過簡化開發過程和降低系統復雜性來幫助開發
    的頭像 發表于 11-23 09:24 ?1231次閱讀

    設計微服務架構的原則

    微服務是一種軟件架構策略,有利于改善整體性能和可擴展性。你可能會想,我的團隊需不需要采用微服務,設計微服務架構有哪些原則?本文會給你一些靈感。文章速覽:微服務設計的要素
    的頭像 發表于 11-26 08:05 ?564次閱讀
    設計<b class='flag-5'>微服務</b>架構的原則

    如何構建彈性、高可用的微服務

    基于微服務的應用程序可實現戰略性數字轉型和云遷移計劃,對于開發團隊來說,這種架構十分重要。那么,如何來構建彈性、高可用的微服務呢?RedisEnterprise給出了一個完美的方案。文況速覽
    的頭像 發表于 11-26 08:06 ?456次閱讀
    如何構建彈性、高可用的<b class='flag-5'>微服務</b>?