成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用 Rust 來構建微服務?

新聞 前端
Rust 是一門很棒的語言,也是我在 2019 年和 2020 年(截止當前)學的最多的語言。Rust 幾乎可以和任何語言互操作,同時對于容器和在 Kubernetes 上運行也非常友好。

 Rust 是一門很棒的語言,也是我在 2019 年和 2020 年(截止當前)學的最多的語言。Rust 幾乎可以和任何語言互操作,同時對于容器和在 Kubernetes 上運行也非常友好。

今天,我想展示下如何使用 Rust 構建一個簡單的微服務。本文中,我們將使用 Actix、Tokio-Postgress 和其他一些庫,使用 Postgres 作為唯一數據源,同時為了便于開發,我們會將其運行在 Docker 容器中。另外,我還會使用自己開發的 Barrel 作為數據庫遷移工具。代碼將全部使用異步和非阻塞 IO 實現。

1. 總體架構

如何使用 Rust 来构建微服务?

這里我們采用多層架構,業務規則和 REST 請求定義在 news-contract 中實現。SOA 約定定義在 news-contract + news-service,數據結構(News)定義在 news-contract。REST 請求的 endpoint 和服務定義在 news-service 中。Postgres 持久化相關功能定義在 news-dao 中。

2. 代碼結構

如何使用 Rust 来构建微服务?

我們一個有 5 個工程,最頂層是一個全局工作空間,作為第一個工程。其余工程有:

news-contract:SOA 約定部分,這里定義了其他工程使用的 News 結構體。

news-dao:包含響應式持久化代碼,基于 tokio-postgres 實現對 News 資源的增刪改查操作。

news-migrations:我們使用 barrel 和自定義邏輯來創建表結構和初始化測試數據。

news-service:這里我們有 endpoint、服務實現和包含 actix-web 框架配置的入口代碼。

每個工程都有自己的依賴,定義在其 Cargo.toml 文件中。

同時,工程中還有 2 個處理 Docker 容器的腳本,一個用于運行 Postgres,另一個用于運行 psql。

3. 數據遷移

現在,讓我們來看看如何實現數據遷移(在 Postgres SQL 中創建表和插入記錄)。

如何使用 Rust 来构建微服务?

首先,我們需要連接運行在 Docker 容器中的 Postgres 數據庫,創建一個向量,向其中添加所有需要運行的數據遷移邏輯。然后循環執行其中的所有數據遷移邏輯,并檢查結果是否正常。

現在,讓我們看下一段代碼,數據遷移邏輯。

如何使用 Rust 来构建微服务?

我創建了一個名為 NewsMigration 的 trait,其中包含 new 函數(用于創建結構體)和 run 函數(用于運行數據遷移)。如你所見,然后創建了 CreateTableNewsMigration 結構體,使用 impl 關鍵字實現了這個 trait。這里我使用了 barrel 來創建表結構,barrel 將會生成 Postgres SQL 的 INSERT 語句。最后,我們使用 pg_client 在 Postres 中運行生成的腳本。這段代碼看上去很繞:&news_table[..],這里我們在傳遞 String 類型 news_table 的引用,將其變成 slice 之后,傳給 pg_client 的 execute 函數。

4. SOA 約定

首先讓我們來看下約定的第一部分,News 結構體。

如何使用 Rust 来构建微服务?

我們定義了一個名為 News 的結構體,同時使用了 serde 和 serde_json,以便于該結構體的序列化和反序列化。這個結構體還實現了 Display trait,用于打印結構體內容。最后在文件的末尾有一個單元測試,用于測試結構體的打印。

5. Endpoint 和服務

如何使用 Rust 来构建微服务?

這里我定義了一個基于 actix 的 HttpServer,然后定義了一系列處理器:index、list_news、insert_news、get_news_by_id 和 delete_news_by_id。服務將會運行在本地的 8080 端口上。所有的信息都使用 log 和 env_logger creates 進行日志記錄。

現在讓我們來看下 endpoint.rs,這里有 REST 請求的定義。

如何使用 Rust 来构建微服务?

這里我們使用宏來定義 REST 操作,例如 PUT、DELETE 和 GET。每個函數處理器都定義成公有且非常簡單,僅僅調用對應的服務,將返回結果序列化成 json 結構返回。

如何使用 Rust 来构建微服务?

這是服務的實現,這里沒有任何 REST 或者 actix 框架的依賴。這里是實現校驗、業務邏輯和代理請求 dao crate 的地方。所有函數的增刪改查操作都是異步的。

6. DAO

這里是魔法發生的地方,我們使用了 tokio-postgress 庫。先來看下代碼。

如何使用 Rust 来构建微服务?

這是 DAO 層的實現。這里有一個名為 connect() 的函數用于連接 Postgres 數據庫,它使用異步非阻塞的方式實現。然后展示的是如何實現 find_by_id 功能。在 Postgres 中 ID 使用 UUID 來生成,因此需要將其轉成字符串類型,這就是為什么代碼中會看見 id::text=$1。同樣在這一行中,我將從入參獲取到的 ID 轉換成了 &[&id] 傳入。DAO 層還有很多函數,有興趣的話可以在我的 GitHub 上查看完整代碼。

視頻:代碼走讀和功能演示

https://vimeo.com/384505355

完整代碼

https://github.com/diegopacheco/rust-playground/tree/master/rust-microservice

參考鏈接

http://diego-pacheco.blogspot.com/2020/01/building-microservice-with-rust.html

 

責任編輯:張燕妮 來源: 架構頭條
相關推薦

2022-09-05 08:00:00

Java微服務AuraDB

2021-12-29 08:30:48

微服務架構開發

2018-09-12 09:00:00

數據庫Redis微服務

2022-08-22 07:26:32

Node.js微服務架構

2018-04-23 14:31:02

微服務GraphQLBFF

2022-09-12 15:58:50

node.js微服務Web

2018-07-09 09:27:10

Spring Clou微服務架構

2018-12-03 08:00:00

微服務gRPC

2023-06-01 15:14:55

架構Python微服務

2021-11-22 09:00:00

后端開發CMS

2023-04-19 07:39:55

RustHTTP服務器

2022-10-10 08:00:00

微服務Spring Boo容器

2023-04-10 07:23:24

軟件微服務網絡

2024-04-10 09:36:17

Spin開源框架

2024-09-13 09:55:38

RustP2P網

2023-12-11 11:56:24

圖片服務器Rust

2021-10-19 14:02:12

服務器SpringSecurity

2018-05-30 10:04:38

容器技術微服務

2023-04-13 15:04:57

Java微服務架構

2021-07-26 08:10:24

微服務單體架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av手机在线 | 九九亚洲| 久久久黑人 | 欧美精品综合在线 | 中文字幕在线第一页 | 在线欧美视频 | 午夜激情免费 | www.9191.com | 成年人精品视频在线观看 | 91国产视频在线观看 | 中文字幕亚洲视频 | 综合久久av | 中文字幕国产第一页 | 欧美日韩国产一区 | 在线小视频 | 国产精品视频一二三区 | 91视频三区 | 最新国产在线 | 天堂中文字幕av | 久草视频观看 | 国产精品五区 | 亚洲综合视频一区 | 免费的av网站 | 国产乱xxav | 99热热99 | 黄色国产 | 99热播精品| 日日干日日射 | 精品免费国产一区二区三区四区介绍 | 羞羞视频网站在线观看 | 一区二区三区四区不卡 | 国产亚洲高清视频 | 国产一区二区在线视频 | 久久精品一二三影院 | 亚洲91精品| 国产一区久久 | 另类一区 | 国外成人免费视频 | 欧洲精品久久久久毛片完整版 | 免费的日批视频 | 91免费小视频 |