您当前的位置:首页 > 今日分享头条 > 正文

如何用Actix去写一个类似于Facemash的小项目呢

如何用Actix去写一个类似于Facemash的小项目呢

本后端项目中使用的技术堆栈主要包括:

Actix Web框架;

日志库;

Serde序列化;

雪花Id生成;

Env获取环境配置;

MongoDB访问;

Lazy_static全局静态初始化;

ELO算法;

在Git提交之前使用预提交进行检查;

具有Github操作的ci;

用中间映像编译代码并创建部署映像;

……

读完这篇文章后,你应该能够了解这些库的用法。

所以唐别废话了,开始吧!

代码实现

代码目录结构

整个项目的目录结构如下(无关文件已删除):

这里对此的解释是:github目录:Github Actions相关配置;

Src目录:项目源代码目录;预提交-配置. yaml:预提交配置;env:项目环境变量的配置;

Cargo.toml:Cargo项目配置;

Makefile:项目编译脚本;

Dockerfile:项目的Docker镜像配置;

Build-image.sh:打包镜像脚本;

对于src目录下的子目录,它这基本上很容易理解。

引入线

货运项目协议程序的切入点是:src/main . RS;

我们从主函数中做了什么:

src/main.rs

在导入文件中,首先启用一些库宏,声明Actix-Web框架的主要功能。

在main函数中,一般后端服务要做的事情已经完成:

获取环境配置;

初始化项目日志;

初始化资源:数据库、Id生成器等。

注册并启动服务;

让让我们分开来看。

和配置日志

获取环境配置

我们可以通过dotenv库分析项目下和系统环境变量中的配置;

只需要下面这句话:

dotenv()。ok();

配置文件如下所示:包封/包围(动词envelop的简写)

MONGODB _ URI=MONGODB://admin:123456 @ localhost:27017/?retry writes=truew=majority log _ LEVEL=info snow flake _ MACHINE _ ID=1 snow flake _ NODE _ ID=1

主要配置MongoDB的连接地址、日志级别和雪花的配置;

上述语句将解决这些配置;

初始化记录器

main函数中的语句初始化记录器:

logger:init();

是由该记录器模块封装的函数:

记录器/调制解调器

上面的代码首先定义了一个全局日志类型记录器;

并在init函数中初始化全局静态变量:LOGGER,用log:set_logger设置;

同时我们从环境变量中获取LOG_LEVEL的日志级别配置(如果没有设置,默认为INFO级别),然后设置;

我们已经为日志记录器实现了log: log trail,这就是为什么我们可以将这种类型的变量设置为Logger!

在log: log trail的实现中,我们简单定义了log的输出格式和输出颜色;

可以看到在很多第三方库的支持下,rust还是很好用的!

初始化资源

接下来我们打电话:

资源:check_resources()。等待;service:init_file_service()。等待;

等待资源初始化完成;

以下初始化文件服务的逻辑非常简单,只是创建了一个临时文件:

我们重点介绍check_resources()函数,其中初始化并验证了MongoDB连接和雪花Id生成器;

相关资源的初始化在资源模块中完成;

资源检查功能在资源模块的入口模块中定义:

资源/模型

MongoDB通过Ping验证数据库连接,雪花通过创建Id验证正确性;

那么这些资源在哪里初始化呢?

主要是第一次用的时候被lazy_static初始化!

lazy_static的一个特点是,第一次使用这个变量时,它会被静态初始化;

让让我们分开来看:

src/resource/mongo.rs

上面的代码在lazy_static里!宏,异步初始化MongoDB的连接:

首先从环境变量中获取配置MONGODB_URI,然后初始化并保存在变量:MONGO_CLIENT中;

src/resource/id_generator.rs

类似于上面的初始化,这里我们从环境变量中得到:雪花_机器_ID和雪花_节点_ID,然后使用snowflakeybutter:new进行初始化;

同时,与MongoDB不同,这里需要使用互斥体进行封装,因为很有可能会出现多个线程同时获取ID的情况;

还有MongoDB 的客户端已经是:弧型!

我们还封装了get_id函数,不用暴露ID_GENERATOR_BUCKET变量就可以直接外部调用!

下面是测试我们的Id生成器的单个测试;

此时,我们的资源被初始化。

审计刘清

标签:项目函数环境变量


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 设备驱动程序下载(bizhub423怎么下载驱动)

下一篇: 方太抽油烟机价格表及图片库(抽油烟机价格表(2016最新))



推荐阅读