- 博客(97)
- 收藏
- 关注
原创 报错“该文件包含不能在当前代码页(936)中表示的字符”:已解决
报错:“该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据 丢失”在使用clang编译时报错该信息,是因为win的编码问题,改为unicode即可。报错:“error C2220: 以下警告被视为错误”
2024-12-22 22:29:02
277
原创 Rust整合Tracing日志和Opentelemetry链路追踪可观测性
方式一:使用span!宏创建span(Level::TRACE, "这是一个span,指定span的级别为trace");// 忽略后离开作用域被drop()例如// 定义一个span,指定span的级别为trace,指定span的名字,这是最低的级别(Level::TRACE, "这是一个span, 指定span的级别为trace");// span开始位置方式二:创建span并手动设置跨度范围// 定义一个span,指定span的级别为trace,指定span的名字,这是最低的级别。
2024-12-02 12:00:00
746
原创 Windows配置开发环境太复杂?试试MSYS2
这里使用MSYS2提供的GNU工具链,而不是MSVC(不需要安装Visual Sudio)在安装时选2配置的内容,不需要修改。你也可以通过以下方式配置指定项目。所有缓存在MSYS2安装目录的。
2024-11-19 14:32:05
1423
原创 Windows使用Scoop安装Nvim并使用LazyVim配置
3、设置全局代理(可选),一般不需要设置(设置ssh key即可)lazyvim提供了一套便捷的配置和插件管理。大多数问题都来源于网络,查看git全局配置。2、配置ssh key,先查看有没有。生成ssh key,一直回车即可。将内容复制粘贴到github。关闭后再次打开nvim然后按。1、设置git用户名和邮箱。卸载scoop,最后删除。等它自动配置好就可以了。
2024-11-19 12:15:00
921
原创 报错expected enum`Result<_, InfraError>` found enum `Result<_, anyhow::Error>`:已解决
InfraErrorthiserror实现了标准库的适合编写库crate适合需要明确错误的应用明确错误类型定义复杂传播复杂(可能需要match或map_err传播)可读性差开发简单Web应用适合使用anyhow,复杂Web应用适合thiserror开发库crate适合thiserror混合使用容易造成混乱(可以相信自己但不能相信猪队友)两者结合使用容易导致应用复杂的例子,例如基础设施层返回InfraError,领域层转换为要做一层转换,到应用层还要转换一次;如果使用anyhow。
2024-11-13 07:45:00
419
原创 Rust 建造者模式
在DDD中,DTO(数据传输对象)->BO(业务对象)、BO(业务对象)->PO(持久化对象,有的叫DO,即和数据表映射的实体)等等情况要做转换,这里提供以下转换方式。
2024-11-12 17:00:00
735
原创 Rust使用lettre发送邮件
Rust使用smtp发送邮件,使用邮件进行注册登陆时可以生成的验证码往redis里写一份,key设置为邮件名,设置过期时间为60s,注册登陆时与redis中的验证码比较即可。这里使用SMTP发送邮件,所以要开启SMTP,由于outlook需要付费,这里使用qq邮箱。生成授权码,这个授权码就是邮件发送者的密码。
2024-11-10 10:00:00
878
原创 报错error: failure removing component ‘rustfmt-preview-x86_64-pc-windows-msvc‘:已解决
报错error: failure removing component 'rustfmt-preview-x86_64-pc-windows-msvc'
2024-11-10 09:15:00
569
原创 详解Rust标准库:BTreeSet
B树第一个元素最小,最后一个元素最大BTreeSet定义// 使用BTreeMap来实现BTreeSet// SetValZST是一个特殊的值类型,它实际上是一个空的结构体(ZST,Zero - Sized Type)// A是分配器类型,用于管理BTreeMap内部的内存分配。
2024-11-07 07:00:00
858
原创 详解Rust标准库:HashSet
HashSet是一种集合数据结构,它只存储唯一的元素。它主要用于检查元素是否存在于集合中,或者对元素进行去重操作,两个键相等,则它们的哈希值必须相等HashSet定义// 默认哈希器为RandomState// 负责管理哈希表的存储和操作。它包含了哈希表的具体实现细节,如存储桶(buckets)、哈希函数、冲突解决策略。
2024-11-06 10:00:00
1151
原创 详解Rust标准库:BTreeMap
B树也称B-树,注意不是减号,是一棵多路平衡查找树;理论上,二叉搜索树 (BST) 是最佳的选择排序映射,但是每次查找时层数越多I/O次数越多,B 树使每个节点都包含连续数组中的 B-1 到 2B-1 元素,可以减少树的高度,减少I/O次数BTreeMap定义// B 树的根节点// B 树映射中存储的键值对的数量// 分配器// PhantomData是一个零大小的类型,用于向编译器提供类型信息,但在运行时不占用任何空间。
2024-11-06 09:30:00
728
原创 详解Rust标准库:HashMap
哈希表又称散列表,是一种键 - 值()对的数据结构,也被称为关联数组或字典。它主要用于存储和快速检索基于特定键的数据这里使用:使用二次探测和 SIMD 查找实现的哈希映射HashMap定义// 指定hash器为RandomState// 实现了具体的哈希映射功能。
2024-11-05 10:00:00
622
原创 详解Rust标准库:VecDeque 队列
队列是遵循先入先出规则的线性数据结构,在内存中不一定连续VecDeque定义:可增长的环形缓冲区实现的双端队列// 队列头部在内部缓冲区中的索引位置// 当前队列中的元素数量// 管理内存分配和释放,确保有足够的空间来存储队列中的元素。
2024-11-04 10:15:00
1003
原创 详解Rust标准库:Vec向量
Vec除了可以作为动态数组还可以模拟为一个栈,仅使用pushpop即可Vec默认分配在堆上,对于一个容量为4,有两个元素ab的向量内存布局如下vVec定义// 存储了动态数组的元素数据,并且根据需要可以动态地增长或收缩以容纳更多或更少的元素// 表示当前Vec中实际存储的元素数量RawVec:定义// 这是一个Unique类型的指针,指向分配的内存块中存储元素的起始位置。这个指针用于访问和操作存储在RawVec中的元素。
2024-11-04 09:45:00
1065
原创 使用Debezium、Kafka实现Elasticsearch数据同步
能够监控各种数据库(如 MySQL、PostgreSQL、Oracle 等)的事务日志(如 MySQL 的 Binlog、PostgreSQL 的 WAL)。Debezium 将数据库中的数据更改事件(例如插入、更新、删除操作)转换为事件流消息,这些消息可以被发送到消息队列(通常是 Kafka)中。我们将所有pg.public.user的topic写入es中,貌似只能指定topic,不能用正则表达式,不过在使用过程中大概率只会将商品、日志等数据同步到es。
2024-10-29 19:15:00
1287
原创 详解Rust标准库:迭代器
对迭代器中的元素进行累积计算,没有初始值(对于只有一个元素的迭代器将第一个元素作为初始值),依次应用一个函数,但可以在处理过程中返回错误。是迭代器中剩余元素数量的最大可能值。:映射,对迭代器中的每个元素映射一个函数,然后返回一个新的迭代器,新迭代器中的元素是原元素经过映射函数转换后的结果。:对迭代器中的每个元素映射一个函数,该映射函数返回一个迭代器,然后将这些迭代器的元素扁平化到一个新的迭代器中。:如果迭代器中的元素是元组,将其拆分为两个迭代器,一个包含元组的第一个元素,另一个包含元组的第二个元素。
2024-10-29 14:30:00
1308
原创 Rust整合Elasticsearch
同时指定先分词再根据词条过滤(如果不自定义分词器,默认将每个汉字单独分为拼音,所以先分词词条再进行拼音处理),其他设置见github仓库。如果搜索页数过深,或者结果集(from+size)越大,对内存和CPU的消耗越高,因此ES设定的查询上限是。docker部署一般用于开发,不要为难自己,使用token会有很多问题,生产环境再开,使用SSl需要证书。,默认true)、是否分词(参与搜索的字段,text分词,keyword、数据类型不分词)、分词器。
2024-10-28 16:45:00
1726
原创 Docker部署Kafka
为实现备份功能,保证某个节点发生故障时,该节点上的分区(Partition)数据不会丢失,且Kafka集群仍然能够继续工作。Kafka是一个开源的时间流处理平台,由Scala和Java编写,持久化本质是分布式事务日志架构的大规模发布订阅。ADVERTISED_LISTENERS必须设置外部连接Kafka broker的地址,本机开发设置为。Leader副本发生故障时,某个Follower副本会成为新的Leader副本,设置副本数量不能为0,也不能大于节点个数,否则不能创建Topic。
2024-10-28 11:45:00
4382
原创 Axum整合sea-orm实现迁移
添加crate安装cli初始化,将会生成migration文件夹迁移可以在开发时随时回滚到数据库初始状态,也可以让其他人通过运行命令来初始化一样的开发环境,还可以保留不同版本的数据库设计,随时初始化不同版本的数据库,避免手动导入sql、手动删除开发测试数据将migration添加到工作区,根目录取消驱动的注释添加或修改你需要的字段,这里定义了一个Post表,idtitletext三个字段编写建表命令,所有类型和约束都已函数的方式添加todo!()用于提示未完成的部分,使用todo!()
2024-10-14 12:30:00
620
原创 Rust Web开发常用库
本集合中所有库都是在开源项目中广泛使用且在2024年积极维护的库,排名靠前的库是当前使用比较广泛的,不全面但够用。
2024-09-27 12:30:00
1417
5
原创 Rust gRPC---Tonic实战
是一种设计风格,通常将 HTTP API 称为 RESTful API、RESTful 服务或 REST 服务。下,客户端无法调用server提供的方法,我们需要将代码生成的目录设置为两个项目的公共目录。反射仅仅是为了让客户端在运行时查询服务定义,而不是为了消除客户端对服务定义的依赖。由于proto生成的rust方法在不同的位置,例如server生成的代码在。这里给出的是在main中启动服务端和客户端,可能你在嵌入式中使用gRPC?两个服务即可看到响应信息,你也可以用postman、apifox请求。
2024-09-27 08:00:00
2382
原创 Rust设计模式
设计模式(design pattern)是对软件设计中普遍存在的各种问题所提出的解决方案可维护性(maintainability):开发人员能够轻松地理解、修改和调试代码,以适应需求的变化或修复错误可读性(readability):可读性好的代码使用清晰的命名、适当的注释和良好的代码风格,使得其他开发人员能够快速理解代码的意图和功能可扩展性(extensibility):可扩展的代码设计考虑到未来的需求变化,通过模块化、低耦合和高内聚的设计,使得新增功能或修改现有功能变得容易灵活性(flexibility)
2024-09-25 08:00:00
1399
原创 使用GitHub Actions实现前后端CI/CD到云服务器
如果你要部署到github pages或者你不用SSR(服务端渲染),那就构建(SSG)静态站点。
2024-09-17 10:45:00
1270
原创 Axum处理错误
axum基于tower服务,该服务通过其关联的错误类型捆绑错误。如果您的服务产生错误并且导致该错误一直传到hyper,则连接将在不发送响应的情况下终止。这通常是不可取的,因此axum确保您始终通过依赖类型系统来生成响应axum通过要求所有服务将Infallible作为其错误类型,是指永远不会发生的错误的错误类型。
2024-09-13 09:15:00
452
原创 Axum路由
使用postman请求可以看到返回了数据0.0.0.0表示所有ipv4地址,但不能被ping通127.0.0.1表示回环地址。所有网络号为127的地址都是回环地址Rust项目源代码发生变化时自动运行 Cargo 命令监听src/目录,更改代码自动重新执行若要监听tests/目录,更改代码自动重新执行测试并显示所有输出。
2024-09-13 08:00:00
1249
原创 Rust使用dotenvy读取环境变量
dotenvy官方给出的是expect处理错误,但我在使用时无法读取文件,使用ok可以读取。dotenv四年没维护了,这里使用。expect错误时触发panic。sea-orm官方用的也是这个。.ok错误时返回None。
2024-09-11 08:00:00
423
原创 Curl命令详解
curl(Client for URLs),可以用来发起HTTP请求,也可以用来下载文件,还可以用来授权,支持协议:HTTP、HTTPS、FTP、SFTP、SMTP、POP3、SOCKS4、IPv6等。显示请求和响应的详细信息,包括请求头、响应头、传输的数据。,并将请求方法转为POST,可以省略`-X POST。格式化输出特定信息,在末尾显示响应码。将请求的Cookie写入文件。下载文件到本地,指定文件名。指定 HTTP 请求的方法。设置HTTP请求来源标头。HTTP请求会默认加上。限制请求和响应的带宽。
2024-09-06 09:15:00
471
原创 k8s开发工具Kind
k3d是基于k3s的构建工具,k3s用于性能有限的平台,功能比k8s少,倘若用k3s测试、k8s部署,会有一些的差异,容器就是为了提供一致性保障,所以确定上线使用k8s,开发测试时Kind最合适。学习、开发k8s应用,本地跑一个k8s更方便,但是直接装一个k8s太重,代码还没敲几行电脑先卡死了,本机需要一个轻量级的k8s用于学习、开发、测试。Kubernetes In Docker,将k8s所需要的所有组件,以docker容器的方式部署。导出kind集群的日志,日志生成在。最小Ingress配置。
2024-09-05 09:30:00
1627
原创 Linux\Docker部署Postgres
只能通过ip通信,这里加入了自定义网络,自定义网络可以自动解析容器名。PostgreSQL是以加州大学伯克利分校计算机系开发的。使用pgAdmin连接postgres。使用Navicat连接postgres。默认账号名:postgres。-v 宿主机路径:容器路径。管理系统(ORDBMS)查看已有网络,使用默认。安装Postgres。卸载Postgres。删除postgres。
2024-09-03 11:00:00
1676
原创 iptables四表五链
netfilter是Linux内核中的一个框架,工作在网络层,用于处理ip数据包,iptables则是一个,通过与netfilter框架交互,实现对数据包的过滤和转发等操作常见的UFW防火墙、firewalld防火墙都是基于iptables的,它们提供了更简单的管理iptables的rules的命令。
2024-09-03 10:00:00
1657
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人