
后端
文章平均质量分 73
cci497
Why? What? Where? When? Who? How?
展开
-
报错“该文件包含不能在当前代码页(936)中表示的字符”:已解决
报错:“该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据 丢失”在使用clang编译时报错该信息,是因为win的编码问题,改为unicode即可。报错:“error C2220: 以下警告被视为错误”原创 2024-12-22 22:29:02 · 306 阅读 · 0 评论 -
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 · 788 阅读 · 0 评论 -
Rust依赖注入
Axum官方推荐以下两种方式实现依赖注入,非必要不使用泛型,都通过AppState存储依赖添加。原创 2024-11-21 10:00:00 · 775 阅读 · 0 评论 -
Windows配置开发环境太复杂?试试MSYS2
这里使用MSYS2提供的GNU工具链,而不是MSVC(不需要安装Visual Sudio)在安装时选2配置的内容,不需要修改。你也可以通过以下方式配置指定项目。所有缓存在MSYS2安装目录的。原创 2024-11-19 14:32:05 · 1465 阅读 · 0 评论 -
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 · 1030 阅读 · 0 评论 -
Rust整合Kafka
这里使用基于librdkafka的 Rust 库,你还可以选择kafka(纯Rust实现的Kafka客户端)原创 2024-11-19 07:30:00 · 1216 阅读 · 0 评论 -
nacos启动后过一会自动关闭,端口被占用但是查不出使用进程
如果你安装了Hyper-v或者WSL2,很不幸什么都查不出来,Widows 默认把某些端口范围分给了他们,所以没有进程占用但nacos或者springboot启动都显示端口被占用。意思就是端口被占用了,Nacos2.0版本新增了gRPC通讯方式,还需要两个端口 9849 和 9849。,显然装hyper-v大概率是需要用docker,我们可以排除需要的端口或者修改TCP 动态端口范围。查看动态端口的端口范围,这是一个待选择范围,并不代表其中的所有端口都会被保留。window系统下成功配置单机模式后。原创 2024-05-22 20:45:01 · 1365 阅读 · 1 评论 -
renren-fast-vue启动报错
建议使用nvm管理node,一定要卸载原来的node和全局安装的npm,使用nvm use nodeVersion,node默认有npm,全局安装的npm会因为node版本不一样使用不了(这个自己找教程)报错的信息里有个chromedriver的链接,点进去就可以下,没有就下我这个链接,不建议直接在npm install chromedriver。下一步报错再来这里,有的人电脑里可能有,安装vsStudio2019的C++桌面开发,node-sass编译要用到。安装node10.16.3。原创 2024-04-12 23:51:35 · 369 阅读 · 0 评论 -
报错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 · 439 阅读 · 0 评论 -
Rust 建造者模式
在DDD中,DTO(数据传输对象)->BO(业务对象)、BO(业务对象)->PO(持久化对象,有的叫DO,即和数据表映射的实体)等等情况要做转换,这里提供以下转换方式。原创 2024-11-12 17:00:00 · 744 阅读 · 0 评论 -
Docker部署Minio
Docker部署最新版minio原创 2024-11-11 07:30:00 · 343 阅读 · 0 评论 -
Rust整合openapi、swagger-ui
前后端分离开发中,接口需要规范化、标准化、文档化,这里使用utoipa。原创 2024-11-11 09:45:00 · 740 阅读 · 0 评论 -
Rust使用lettre发送邮件
Rust使用smtp发送邮件,使用邮件进行注册登陆时可以生成的验证码往redis里写一份,key设置为邮件名,设置过期时间为60s,注册登陆时与redis中的验证码比较即可。这里使用SMTP发送邮件,所以要开启SMTP,由于outlook需要付费,这里使用qq邮箱。生成授权码,这个授权码就是邮件发送者的密码。原创 2024-11-10 10:00:00 · 919 阅读 · 0 评论 -
报错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 · 611 阅读 · 0 评论 -
详解Rust标准库:BinaryHeap
大根堆(任一节点大于其子节点的值),每次更改堆结构都会重新维护为大根堆BinaryHeap定义。原创 2024-11-07 12:30:00 · 994 阅读 · 0 评论 -
详解Rust标准库:BTreeSet
B树第一个元素最小,最后一个元素最大BTreeSet定义// 使用BTreeMap来实现BTreeSet// SetValZST是一个特殊的值类型,它实际上是一个空的结构体(ZST,Zero - Sized Type)// A是分配器类型,用于管理BTreeMap内部的内存分配。原创 2024-11-07 07:00:00 · 879 阅读 · 0 评论 -
详解Rust标准库:HashSet
HashSet是一种集合数据结构,它只存储唯一的元素。它主要用于检查元素是否存在于集合中,或者对元素进行去重操作,两个键相等,则它们的哈希值必须相等HashSet定义// 默认哈希器为RandomState// 负责管理哈希表的存储和操作。它包含了哈希表的具体实现细节,如存储桶(buckets)、哈希函数、冲突解决策略。原创 2024-11-06 10:00:00 · 1174 阅读 · 0 评论 -
详解Rust标准库:BTreeMap
B树也称B-树,注意不是减号,是一棵多路平衡查找树;理论上,二叉搜索树 (BST) 是最佳的选择排序映射,但是每次查找时层数越多I/O次数越多,B 树使每个节点都包含连续数组中的 B-1 到 2B-1 元素,可以减少树的高度,减少I/O次数BTreeMap定义// B 树的根节点// B 树映射中存储的键值对的数量// 分配器// PhantomData是一个零大小的类型,用于向编译器提供类型信息,但在运行时不占用任何空间。原创 2024-11-06 09:30:00 · 756 阅读 · 0 评论 -
详解Rust标准库:HashMap
哈希表又称散列表,是一种键 - 值()对的数据结构,也被称为关联数组或字典。它主要用于存储和快速检索基于特定键的数据这里使用:使用二次探测和 SIMD 查找实现的哈希映射HashMap定义// 指定hash器为RandomState// 实现了具体的哈希映射功能。原创 2024-11-05 10:00:00 · 646 阅读 · 0 评论 -
详解Rust标准库:LinkedList 链表
LinkedList节点定义// 下一个节点// 上一个节点// 当前节点值。原创 2024-11-05 07:45:00 · 507 阅读 · 0 评论 -
详解Rust标准库:VecDeque 队列
队列是遵循先入先出规则的线性数据结构,在内存中不一定连续VecDeque定义:可增长的环形缓冲区实现的双端队列// 队列头部在内部缓冲区中的索引位置// 当前队列中的元素数量// 管理内存分配和释放,确保有足够的空间来存储队列中的元素。原创 2024-11-04 10:15:00 · 1042 阅读 · 0 评论 -
详解Rust标准库:Vec向量
Vec除了可以作为动态数组还可以模拟为一个栈,仅使用pushpop即可Vec默认分配在堆上,对于一个容量为4,有两个元素ab的向量内存布局如下vVec定义// 存储了动态数组的元素数据,并且根据需要可以动态地增长或收缩以容纳更多或更少的元素// 表示当前Vec中实际存储的元素数量RawVec:定义// 这是一个Unique类型的指针,指向分配的内存块中存储元素的起始位置。这个指针用于访问和操作存储在RawVec中的元素。原创 2024-11-04 09:45:00 · 1079 阅读 · 0 评论 -
详解Rust标准库:迭代器
对迭代器中的元素进行累积计算,没有初始值(对于只有一个元素的迭代器将第一个元素作为初始值),依次应用一个函数,但可以在处理过程中返回错误。是迭代器中剩余元素数量的最大可能值。:映射,对迭代器中的每个元素映射一个函数,然后返回一个新的迭代器,新迭代器中的元素是原元素经过映射函数转换后的结果。:对迭代器中的每个元素映射一个函数,该映射函数返回一个迭代器,然后将这些迭代器的元素扁平化到一个新的迭代器中。:如果迭代器中的元素是元组,将其拆分为两个迭代器,一个包含元组的第一个元素,另一个包含元组的第二个元素。原创 2024-10-29 14:30:00 · 1318 阅读 · 0 评论 -
使用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 · 1358 阅读 · 0 评论 -
Rust整合Elasticsearch
同时指定先分词再根据词条过滤(如果不自定义分词器,默认将每个汉字单独分为拼音,所以先分词词条再进行拼音处理),其他设置见github仓库。如果搜索页数过深,或者结果集(from+size)越大,对内存和CPU的消耗越高,因此ES设定的查询上限是。docker部署一般用于开发,不要为难自己,使用token会有很多问题,生产环境再开,使用SSl需要证书。,默认true)、是否分词(参与搜索的字段,text分词,keyword、数据类型不分词)、分词器。原创 2024-10-28 16:45:00 · 1741 阅读 · 0 评论 -
Docker部署Kafka
为实现备份功能,保证某个节点发生故障时,该节点上的分区(Partition)数据不会丢失,且Kafka集群仍然能够继续工作。Kafka是一个开源的时间流处理平台,由Scala和Java编写,持久化本质是分布式事务日志架构的大规模发布订阅。ADVERTISED_LISTENERS必须设置外部连接Kafka broker的地址,本机开发设置为。Leader副本发生故障时,某个Follower副本会成为新的Leader副本,设置副本数量不能为0,也不能大于节点个数,否则不能创建Topic。原创 2024-10-28 11:45:00 · 4511 阅读 · 0 评论 -
Rust使用config加载Toml配置文件
前面提到用这里从配置文件中读取配置原创 2024-10-19 14:45:00 · 1667 阅读 · 0 评论 -
Axum整合sea-orm实现迁移
添加crate安装cli初始化,将会生成migration文件夹迁移可以在开发时随时回滚到数据库初始状态,也可以让其他人通过运行命令来初始化一样的开发环境,还可以保留不同版本的数据库设计,随时初始化不同版本的数据库,避免手动导入sql、手动删除开发测试数据将migration添加到工作区,根目录取消驱动的注释添加或修改你需要的字段,这里定义了一个Post表,idtitletext三个字段编写建表命令,所有类型和约束都已函数的方式添加todo!()用于提示未完成的部分,使用todo!()原创 2024-10-14 12:30:00 · 677 阅读 · 0 评论 -
rust生成html文档
在docs.rs看到的文档基本都是由这种方式生成的。原创 2024-09-27 12:15:00 · 727 阅读 · 0 评论 -
Rust Web开发常用库
本集合中所有库都是在开源项目中广泛使用且在2024年积极维护的库,排名靠前的库是当前使用比较广泛的,不全面但够用。原创 2024-09-27 12:30:00 · 1463 阅读 · 5 评论 -
Rust gRPC---Tonic实战
是一种设计风格,通常将 HTTP API 称为 RESTful API、RESTful 服务或 REST 服务。下,客户端无法调用server提供的方法,我们需要将代码生成的目录设置为两个项目的公共目录。反射仅仅是为了让客户端在运行时查询服务定义,而不是为了消除客户端对服务定义的依赖。由于proto生成的rust方法在不同的位置,例如server生成的代码在。这里给出的是在main中启动服务端和客户端,可能你在嵌入式中使用gRPC?两个服务即可看到响应信息,你也可以用postman、apifox请求。原创 2024-09-27 08:00:00 · 2425 阅读 · 0 评论 -
Rust设计模式
设计模式(design pattern)是对软件设计中普遍存在的各种问题所提出的解决方案可维护性(maintainability):开发人员能够轻松地理解、修改和调试代码,以适应需求的变化或修复错误可读性(readability):可读性好的代码使用清晰的命名、适当的注释和良好的代码风格,使得其他开发人员能够快速理解代码的意图和功能可扩展性(extensibility):可扩展的代码设计考虑到未来的需求变化,通过模块化、低耦合和高内聚的设计,使得新增功能或修改现有功能变得容易灵活性(flexibility)原创 2024-09-25 08:00:00 · 1433 阅读 · 0 评论 -
使用GitHub Actions实现前后端CI/CD到云服务器
如果你要部署到github pages或者你不用SSR(服务端渲染),那就构建(SSG)静态站点。原创 2024-09-17 10:45:00 · 1311 阅读 · 0 评论 -
Axum路由
使用postman请求可以看到返回了数据0.0.0.0表示所有ipv4地址,但不能被ping通127.0.0.1表示回环地址。所有网络号为127的地址都是回环地址Rust项目源代码发生变化时自动运行 Cargo 命令监听src/目录,更改代码自动重新执行若要监听tests/目录,更改代码自动重新执行测试并显示所有输出。原创 2024-09-13 08:00:00 · 1280 阅读 · 0 评论 -
Rust使用dotenvy读取环境变量
dotenvy官方给出的是expect处理错误,但我在使用时无法读取文件,使用ok可以读取。dotenv四年没维护了,这里使用。expect错误时触发panic。sea-orm官方用的也是这个。.ok错误时返回None。原创 2024-09-11 08:00:00 · 438 阅读 · 0 评论 -
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 · 1647 阅读 · 0 评论 -
不想再用mod.rs了?试试Rust模块新的命名约定
println!("bar");println!("foo");在mod.rs定义的内容编译器会找同级目录的bar.rs或bar\mod.rs文件// 公开模块识别cratemain.rsmod util;模块树执行cargo run成功调用方法barfoo也可以直接在里编写方法,比如路由// 公开模块才能识别到crate和方法println!("routes");routes();模块树。原创 2024-08-27 09:28:41 · 803 阅读 · 0 评论 -
Rust Web框架怎么选?
如果追求性能、教程案例、解决方案数量后端:想用多用宏就用Actix-web,不想用宏就用Axum,个人更看好Axum前端:只写前端页面选Yew;全栈应用选Dioxus;跨平台选Tauri。原创 2024-08-26 13:38:50 · 1925 阅读 · 0 评论 -
idea常用免费插件(持续更新欢迎补充)
Chinese (Simplified) Language Pack:中文插件Grep Console:支持显示ascii颜色CodeGlance:编辑区缩略图插件Json Parser:验证和格式化JSON字符串MybatisX:Mybatisplus插件Translation:翻译CheckStyle:Java代码格式规范Rainbow Brackets Lite:免费彩虹颜色括号Key promoter X:快捷键提示工具Maven Helper:解决 Maven 依赖冲突和排查依原创 2024-07-29 23:10:46 · 638 阅读 · 0 评论 -
Linux安装Jmeter及简单使用教程
首先需要java环境下载二进制包编辑配置文件,添加以下内容修改jmeter配置文件设置中文重新加载配置文件source /etc/profile`原创 2024-07-08 20:14:58 · 865 阅读 · 0 评论