当前位置: 首页 > news >正文

【华为云开发者学堂】基于华为云 CodeArts CCE 开发微服务电商平台

实验目的

通过完成本实验,在 CodeArts 平台完成基于微服务的应用开发,构建和部署。

● 理解微服务应用架构和微服务模块组件
● 掌握 CCE 平台创建基于公共镜像的应用的操作
● 掌握 CodeArts 平台编译构建微服务应用的操作
● 掌握 CodeArts 平台部署微服务应用的操作

实验场景

实验以构建和部署 giftshop 的微服务应用为例,创建了 giftshop 中的用户、仓库、订单服务,并分离了各服务的数据库应用,结合服务中心和服务网关实现了基于微服架构的电商平台开发与搭建。

实验步骤

1. 登录云账户

进入【实验操作桌面】,点击手册上方的【预置实验环境】按钮,系统将自动为您创建好实验所需的 VPC ,安全组,创建时间约为 1 分钟。

2. 创建云容器引擎 CCE

步骤 1 进入华为云控制台,点击左侧服务列表,搜索 CCE 后,点击进入云容器引擎 CCE 控制台。

步骤 2 在云容器引擎界面,点击创建“CCE Standard 集群”。

步骤 3 根据以下说明给出配置项购买 CCE

① 集群配置:

○ 计费模式:按需计费

○ 集群名称:demo

○ 版本:v1.25

○ 集群管理规模:50节点

○ 高可用:否

○ 网络模型:容器隧道网络

○ 虚拟私有云:选择已创建的虚拟私有云,如vpc-hce

○ 所在子网:选择已创建的子网,如subnet-hce

其他配置项保持默认,点击“下一步:插件配置”。

② 插件配置:

取消所有已勾选的插件,点击“下一步:规格确认”。

③ 规格确认:

勾选知晓说明,点击“提交”

步骤 4 等待集群创建成功后(约10分钟左右),在集群下方点击“创建节点”

步骤 5 根据以下说明给出配置项

○ 计费模式:按需计费

○ 可用区:可用区1

○ 规格:8核|32GB(请选择至少8核32G节点)

○ 操作系统:公共镜像 EulerOS2.9

○ 密码:自定义

○ 弹性IP:自动创建

其他配置项保持默认,点击“下一步:规格确认”

步骤 6 在规格确认页面,勾选相关说明,点击“提交”。

步骤 7 节点创建需3分钟左右,请等待节点资源创建完成。

3. 创建容器镜像组织

步骤 1 回到华为云控制台,点击左侧服务列表,搜索 SWR 后,点击进入容器镜像服务 SWR 控制台。

步骤 2 在 SWR 控制台点击“创建组织”。

步骤 3 设置一个组织名称,注意组织名全局唯一,这里以 giftshop1 为例。请记录自己设置的组织名,作为后续实验中的参数进行配置。

4. 创建项目和导入仓库

步骤 1 回到华为云控制台,点击左侧服务列表,搜索 CodeArts 后,点击进入软件开发生产线 CodeArts 控制台。

步骤 2 在 CodeArts 控制台,点击“立即使用”

步骤 3 在“所有项目”界面,选择选用“看板”。

步骤 4 输入项目名称为“microservice_giftshop”,点击“确定”并进行个人信息设置。

步骤 5 点击“代码>代码托管”,进入到代码仓库界面。

步骤 6 点击“新建普通仓库”的下拉箭头,选择“导入外部仓库”。

步骤 7 将以下仓库地址复制到“源仓库路径”中,点击“下一步”。

拷贝代码https://codehub.devcloud.cn-north-4.huaweicloud.com/microservice_giftshop00001/Gift-MicroServices.git

步骤 8 在创建仓库页面中直接点击“确定”。

步骤 9 重复上述步骤,导入以下外部仓库

拷贝代码https://codehub.devcloud.cn-north-4.huaweicloud.com/microservice_giftshop00001/Gift-UI.git

步骤 10 可以看到有以下两个仓库已导入到本项目中。

5. 创建数据库和 RabbitMQ 应用

5.1 创建数据库应用

需要依次创建和配置user、store、bill服务需要的数据库:mysql-user,mysql-store,mysql-bill,操作步骤以mysql-user为例。

步骤 1 回到云容器引擎控制台,点击“工作负载>无状态负载>创建无状态工作负载”

步骤 2 填写如下工作负载基本信息后,点击“下一步”。

○ 工作负载名称:mysql-user

○ 集群名称:demo(选择已创建的集群)

○ 命名空间:default

○ 实例数量:1

步骤 3 在容器设置中,“添加容器”,选择“镜像中心”并找到mysql镜像,点击“确定”。

步骤 4 镜像版本选择“5.6”,容器规格保持默认。

步骤 5 在下方“环境变量”列表中,“添加环境变量”后,点击“下一步:工作负载访问设置”。

○ 变量名称:MYSQL_ROOT_PASSWORD

○ 变量/变量引用:123456

步骤 6 在“服务设配置”中,点击“+”添加服务。设置以下服务参数后点击确定。

○ 服务名称:mysql-user

○ 访问类型:节点访问

○ 服务亲和:节点级别

○ 端口配置:TCP|3306|3306|指定端口|30036

步骤 7 点击“创建工作负载”。

步骤 8 返回工作负载列表,稍等片刻后,可以看到mysql-user已在运行中。

步骤 9 点击“mysql-user”,进入详情界面。

步骤 10 选择“访问方式”页签,记录mysql-user所对应的集群内部域名访问地址。此地址将用作后续服务配置中。

步骤 11 重复上步骤,完成mysql-store,mysql-bill工作负载的创建,注意改写相应的工作负载和名称。并按照如下参数,设置服务的端口配置。同时记录服务的访问地址。

① mysql-store:

端口配置:TCP|3306|3307|指定端口|30037

② mysql-bill:

端口配置:TCP|3306|3308|指定端口|30038

步骤 12 完成后即可看到列表中的3个mysql应用。

5.2 初始化数据库

步骤 1 回到华为云控制台,点击左侧服务列表,搜索 DAS ,进入数据管理服务 DAS 控制台

步骤 2 在开发工具页面点击“新增数据库实例登录”。

步骤 3 填写如下数据库信息:

数据库引擎:MySQL

数据库来源:ECS自建数据库,选择CCE节点实例

端口:30036

登录用户名:root

密码:123456(为前面步骤中所设置容器的环境变量密码)

描述:mysql-user

步骤 4 点击“测试连接”,测试成功后,点击“确定”。

步骤 5 返回登录列表中,在对应的mysql数据库后面点击“登录”。

步骤 6 点击上方导航栏的“SQL操作>SQL查询”。

步骤 7 在SQL窗口中输入如下命令,点击“执行SQL”,创建数据库gift-user。

拷贝代码CREATE DATABASE `gift-user`;

(注意是反引号,一般在键盘~符号下)

步骤 8 可以在“首页”看到已创建好的数据库。

步骤 9 重复步骤2~8,通过正确的端口号登录到对应的数据库中,并创建与mysql-store 和mysql-bill所对应的数据库实例gift-store和gift-bill。

5.3 创建 RabbitMQ 应用

参考创建MySQL数据库应用步骤创建RabbitMQ应用

步骤 1 登录到1.5中的云容器引擎控制台,点击“工作负载>无状态>创建无状态工作负载”

步骤 2 填写如下工作负载基本信息

○ 工作负载名称:rabbitmq

○ 命名空间:default

○ 实例数量:1

步骤 3 在容器设置中,“添加容器”,选择“开源镜像中心”并找到rabbitmq镜像,点击“确定”。

步骤 4 镜像版本选择“3.7-management”,容器规格保持默认。

步骤 5 在下方“环境变量”列表中,添加如下环境变量后,点击“下一步:工作负载访问设置”。

① 变量名称:RABBITMQ_DEFAULT_USER 变量/变量引用:root

② 变量名称:RABBITMQ_DEFAULT_PASS 变量/变量引用:123456

步骤 6 在工作负载访问设置中,点击“添加服务”。设置服务参数后点击确定。

访问类型:集群内访问

服务名称:rabbitmq

端口配置:TCP|5672|5672

步骤 7 直接点击“创建”。返回工作负载列表,稍等片刻后,可以看到rabbitmq已在运行中。

步骤 8 点击rabbitmq,进入到详情页,记录rabbitmq服务的集群内部域名访问地址。

至此完成数据库和rabbitmq应用的创建。

6. 构建和部署电商平台应用

6.1 gift-server 服务构建和部署

6.1.1 gift-server服务的构建

步骤 1 登录到 CodeArts 平台,进入所创建的 microservice_giftshop 项目中。

步骤 2 选择“持续交付>编译构建”。

步骤 3 点击“新建任务”。

步骤 4 设置如下参数,点击“下一步”。

任务名称:gift-server

源码仓库:Gift-MicroServices

分支:master

其他配置项默认即可。

步骤 5 选择“Maven”模版,点击“确定”。

步骤 6 在"Maven构建"->"命令"中,输入以下Maven构建命令替换原有命令。

拷贝代码mvn -f gift-server/pom.xml -U package

步骤 7 删除原有的“上传软件包到发布库”。

步骤 8 选择“添加步骤”,添加构建步骤为“制作镜像并推送SWR仓库”。

步骤 9 配置如下内容:

步骤显示名称:保持默认

工具版本:docker18.03

镜像仓库:华为云镜像仓库SWR

授权用户:当前用户

组织:giftshop1(填写前面已创建的组织名称)

镜像名字:gift-server

镜像标签:1.0.0

工作目录:保持默认

Dockerfile路径:./gift-server/Dockerfile

步骤 10 设置完成后,点击“新建并执行”。最后可以看到任务成功执行完成。

6.1.2 gift-server服务的部署

步骤 1 创建yml文件。

回到云容器引擎,点击工作负载下面的“无状态工作负载”,并点击“创建无状态工作负载”:

① 基本信息:

○ 工作负载名称:gift-server

○ 命名空间: default

○ 实例数量:1

② 容器配置:

○ 镜像名称:选择我的镜像:gift-server 并确定。

○ 镜像版本:1.0.0

○ 内存申请及限制配额均为:2048

③ 服务配置:

○ Service 名称:gift-server

○ 访问类型:集群内访问

○ 端口配置:TCP|8000|8000

其他默认,点击右侧的YAML创建,下载保存对应文件代码至本地。然后点击下方的“创建工作负载”,完成无状态工作负载的创建。

点击刚才创建的无状态工作负载(gift-server),进入访问方式点击“访问方式”,记录gift-server的集群内部域名访问地址。此地址将用于修改gift-zuul代码中对应的地址。

步骤 2 回到CodeArts“编译构建”页面,构建完成后,点击“部署”。

步骤 3 点击“新建应用”。

步骤 4 应用名称为gift-server,点击“下一步”。

步骤 5 选择系统模板中的“空白模板”,点击“下一步”

在“容器类”中选择Kubernetes Manifest部署,点击添加,信息配置如图。

步骤 6 配置如下内容:

○ 步骤显示名称:保持默认

○ yml文件来源:制品仓库

○ 选择yaml文件/文件夹:上传已下载的gift-server.yaml文件

上传成功后回到配置界面,如下所示:

○ 集群名称:demo

○ 命名空间:default

步骤 7 点击右上方的“保存并执行”,执行部署任务。

部署任务执行成功后,如下图:

至此完成gift-server微服务应用的构建和部署。

6.2 确认服务配置文件

下面将对gift-zuul、gift-user、gift-store、gift-bill的application.yaml文件进行配置确认,若一致则不需要进行修改,如有不同请按下表进行修改。

此前已经记录的mysql、rabbitmq和gift-server应用的域名访问地址和相关参数如下,此表作为参考,请根据具体情况进行记录。

6.2.1 gift-zuul 服务配置文件确认

步骤 1 在 CodeArts 实践项目中,点击“代码>代码托管”。

步骤 2 进入“Gift-MicroServices”代码仓库。

步骤 3 找到gift-zuul/src/main/resources/application.yml文件

步骤 4 将获取的gift-server的访问地址对比如下位置。若一致,则不需进行改动,若不一致,则进行点击右上方编辑替换。

6.2.2 gift-user服务配置文件确认

gift-store和gift-bill服务配置文件确认方法与gift-user类似,此处以gift-user配置文件为例。

步骤 1 找到gift-user/src/main/resources/application.yml文件,确认以下三处代码:

① mysql-user服务的域名地址和密码

② rabbitmq服务的域名、用户名和密码

③ gift-server服务的域名地址

步骤 2 若与你之前的配置有所不同,请编辑修改至与你配置一致,若相同则不用修改。

步骤 3 根据步骤1~2确认gift-store和gift-bill配置文件。

6.3 执行编译构建任务

按照gift-server构建任务的创建方式,依次对gift-user,gift-store,gift-bill,gift-zuul进行构建。

步骤 1 在gift-server构建任务的“操作”列选择“复制”图标。

步骤 2 任务名称修改为:gift-user。

步骤 3 点击上方的“构建步骤”栏,替换Maven构建命令行中的gift-server为gift-user。

步骤 4 点击“制作镜像并推送到SWR仓库”步骤,替换镜像名字为“gift-user”,并替换Dockerfile路径为“gift-user”。 然后点击复制并执行。

步骤 5 进行任务复制,并按步骤2-步骤4替换步骤中相应的名字,完成gift-store,gift-bill,gift-zuul的构建任务。

6.4 执行部署任务

按照gift-server部署任务的创建方式,依次对gift-user,gift-store,gift-bill,gift-zuul进行部署。

步骤 1 复制之前已下载的gift-server.yml文件,全文替换gift-server分别为gift-user,gift-store,gift-bill,gift-zuul,并修改端口号为8001, 8002, 8003, 8004,并进行保存。

替换方式可参考:

① vim的全局替换命令为

拷贝代码:%s/gift-server/gift-user/g

② 滑动到文件最后,进入编辑修改服务对应的两个端口

步骤 2 在gift-server部署任务的“操作”列点击“复制”图标。

步骤 3 点击“基本信息”一栏,修改任务名称为:gift-user。

步骤 4 回到“部署步骤”一栏,上传对应的gift-user.yml文件,然后点击“保存并执行”。

步骤 5 部署完成后,对该部署任务进行复制,按照步骤3-步骤4,完成gift-store,gift-bill,gift-zuul的部署任务。

步骤 6 完成部署后,可以查看到所有部署的任务状态。

6.5 gift-ui 服务构建和部署

6.5.1 gift-ui 服务配置文件修改

步骤 1 登录到云容器引擎控制台,在“节点管理”下找到节点的弹性公网IP。记录该IP地址。

步骤 2 在CodeArts实践项目中,点击“代码>代码托管”。

步骤 3 点击进入“Gift-UI”代码仓库。

步骤 4 打开ll_user.html文件,点击“编辑”。

步骤 5 Ctrl+F 搜索 “http://” 替换匹配位置的ip地址+端口号(ip为步骤1中的弹性公网IP,端口号此实践设置为30008,例如此处为http:// 114.116.228.69:30008),注意替换所有对应位置的地址。

步骤 6 输入备注信息后点击“确定”,保存修改。

步骤 7 按照上述步骤4~6的方法依次将ll_store.html、ll_bill.html、login.html文件中对应的访问地址替换为新的地址。注意替换文件中所有对应位置的地址,每文件约1~5处。

6.5.2 gift-ui服务的构建

步骤 1 进入CodeArts编译构建界面,点击“新建任务”。

○ 任务名称:Gift-UIxx

○ 源码仓库:Gift-UI

○ 分支:master

其他默认即可,点击“下一步”。

步骤 2 选择Shell模版,点击“下一步”。

步骤 3 在“命令”中,输入以下shell命令。

拷贝代码tar -zcvf gift-ui.tar.gz ./*

步骤 4 选择“+”号,添加构建步骤为“制作镜像并推送SWR仓库”。

步骤 5 配置如下内容:

○ 步骤显示名称:保持默认

○ 工具版本:docker18.03

○ 镜像仓库:华为云镜像仓库SWR

○ 授权用户:当前用户

○ 组织:giftshop1(填写1.6中的组织名称)

○ 镜像名字:gift-ui

○ 镜像标签:1.0.1

○ 工作目录:保持默认

○ Dockerfile路径:./Dockerfile

步骤 6 点击“新建并执行”。片刻之后,可以看到构建成功。

6.5.3 gift-ui服务的部署

步骤 1 创建yml文件及对应的无状态工作负载。修改如下,然后点击“下一步:工作负载访问设置”:

○ 工作负载名称:gift-ui。

○ 集群名称:demo

○ 命名空间:default

○ 实例数量:1

○ 镜像选择在“我的镜像”选择对应gift-ui镜像

○ 镜像版本:1.0.1

○ CPU申请配额/CPU限制配额:0.3

○ 内存申请配额/内存限制配额:2048

点击“添加服务”按钮,进行如下配置

○ Service名称:gift-ui

○ 访问类型:节点访问

○ 服务亲和:节点级别

○ 端口配置:TCP|80|30008

保存如下代码至gift-ui.yml文件,并完成创建。

步骤 2 构建完成后,点击“部署”。回到部署页面,对gift-zuul部署任务进行复制。

步骤 3 修改任务名称为gift-ui。

步骤 4 点击“部署步骤”,在“发布仓库”上传对应的gift-ui.yml文件。

步骤 5 完成配置后,点击“保存并执行”。执行部署任务。

步骤 6 等待片刻后,显示部署成功。

7. 实验结果验证

7.1 查看构建镜像

步骤 1 登录容器镜像服务SWR,打开链接https://www.huaweicloud.com/s/JVNXUiU,点击“立即使用”。

步骤 2 在“我的镜像”中可以看到所有构建成功的镜像。

7.2 验证网页能够正常使用

步骤 1 回到云容器引擎 CCE 控制台。

步骤 2 在“工作负载>无状态工作负载”下,可以查看到所有部署成功的应用。

步骤 3 由于前面步骤设置的为节点访问,故gift-shop的访问地址为http://节点ip:端口号,端口号为前面步骤设置的30008。

步骤 4 访问可以打开gift-shop的登录界面。

步骤 5 加入后缀地址,如http://节点ip:端口号/ll_user.html,可以访问对应的用户管理界面。

步骤 6 在用户管理界面,自定义添加一个用户,点击“save”。

步骤 7 可以看到已增加一行用户列表。

步骤 8 点击右上角“logout”退出当前界面。

步骤 9 使用刚刚创建的用户登录到giftshop网站。

步骤 10 可以发现用户已经生效,可以成功登录,你也可以按照上述方法进入到对应的仓库管理和订单管理页面,添加仓库和订单列表。

7.3 验证数据已成功写入数据库

步骤 1 登录数据管理服务DAS,点击“数据库免费登录”。

步骤 2 登录到mysql-user所对应的数据库中(端口号为30036的数据库)。

步骤 3 点击数据库“gift-user”。

步骤 4 在对应表“user”后面点击“打开表”。

步骤 5 可以看到已有一条已创建的用户记录,该记录即为前面创建的shop用户。

相关文章:

【华为云开发者学堂】基于华为云 CodeArts CCE 开发微服务电商平台

实验目的 通过完成本实验,在 CodeArts 平台完成基于微服务的应用开发,构建和部署。 ● 理解微服务应用架构和微服务模块组件 ● 掌握 CCE 平台创建基于公共镜像的应用的操作 ● 掌握 CodeArts 平台编译构建微服务应用的操作 ● 掌握 CodeArts 平台部署微…...

小R的蛋糕分享

小R的蛋糕分享 问题描述 小R手里有一个大小为 n 行 m 列的矩形蛋糕,每个小正方形区域都有一个代表美味度的整数。小R打算切割出一个正方形的小蛋糕给自己,而剩下的部分将给小S。她希望两人吃的部分的美味度之和尽量接近。 我们定义小R吃到的部分的美味度…...

24级 秋季学期期末考试安排(专升本)

1.删除 delete 2.耐心 patience 3.设计师 designer 4.身体的 physical 5.材料,物质 material 6.极其,极端 extremely 7.摩托车 motorbike 8.城市的 urban 9.意识 awareness 10.事故 accident 16.choose B:挑选 17.prove C:证明 1…...

点击底部的 tabBar 属于 wx.switchTab 跳转方式,目标页面的 onLoad 不会触发(除非是第一次加载)

文章目录 1. tabBar 的跳转方式2. tabBar 跳转的特点3. 你的配置分析4. 生命周期触发情况5. 总结 很多人不明白什么是第一次加载,两种情况讨论,第一种情况假设我是开发者,第一次加载就是指点击微信开发者工具上边的编译按钮,每点击…...

Web枚举:深入了解目标应用系统

Web枚举是渗透测试中重要的第一步,旨在全面收集目标系统的信息,以便后续攻击载荷的构建更具针对性和效率。本文将详细讨论如何通过各种方法识别目标Web应用的技术栈,并提取关键信息。 1. 识别目标系统的技术栈 技术栈指Web应用所依赖的技术组…...

【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题

本篇鸡汤:没有人能替你承受痛苦,也没有人能拿走你的坚强. 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你解答洛谷的括号序列问题(绝对巧解) 制作日期:2025.01.10 隶属专栏:C/C题…...

Windows Docker 安装

使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。 Docker 的出现让…...

Spring 设计模式:经典设计模式

Spring 设计模式:经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用,开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…...

vscode支持ssh远程开发

文章目录 一、生成ssh使用的公钥/密钥对二、使用vscode通过ssh连接服务器1.安装插件2.配置文件3.连接服务器4.新建文件夹,存放不同的任务 三、使用scp命令与服务器互传文件、文件夹1.检查Windows 系统是否支持scp命令2.在Windows系统本地的电脑向服务器传输文件、文…...

ssh2-sftp-client和ssh2配合使用js脚本快速部署项目到服务器

有时候因为服务器不能实现github或者gitlab的自动部署服务,所以就需要使用脚本来实现自动部署,可以省时省力,一劳永逸。这里就使用ssh2-sftp-client和ssh2来实现,即便是需要sudo权限,也是可以的。 1.先将本地打包后的…...

CODESYS MODBUS TCP通信(禾川Q1 PLC作为MODBUS TCP从站)

禾川Q1 PLC MODBUS TCP 通信(PLC作为MODBUS TCP通信主站) 禾川Q1 PLC MODBUS TCP通信(CODESYS平台完整配置+代码)-CSDN博客文章浏览阅读28次。MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)_将matlab仿真导入plc-CSDN博客文章浏览阅读722次。本文详细介绍了如…...

2025年第三届“华数杯”国际大学生数学建模竞赛A题题目

问题A:他能游得更快吗? 背景介绍 在2024年巴黎奥运会上,中国游泳运动员潘展乐凭借出色的表现成为全球瞩目的焦点。年仅19岁的他在男子100米自由泳比赛中以46秒40 的成绩夺冠,并创造了自己保持的世界纪录。在男子4100米混合泳接力…...

一、智能体强化学习——强化学习基础

1.1 强化学习与深度学习的基本概念 1.1.1 强化学习的核心思想 什么是强化学习? 强化学习(Reinforcement Learning, RL):指在与环境(Environment)的反复交互中,智能体(Agent&#x…...

USB学习——基本概念

文章目录 USB(Universal Serial Bus)概述USB系统的描述USB总线传输方式USB的拓扑结构 USB的连接模型USB控制器及分类USB描述符USB 端点USB枚举过程USB 四种传输类型USB 事务批量传输(Bulk)中断传输(Interrupt)等时传输(Isochronous)控制传输(Control)端点…...

vue3 初体验

git代码git clone https://github.com/kailong321200875/vue-element-plus-admin.git 后端自己写python,Django架构 1.报错:跨域,代理的方式解决 server: {port:4000, ##前端启动端口proxy: {// 选项写法/api: {target: http://127.0.0.1…...

CAPL语法基础

CAPL语法基础 目录 CAPL语法基础1. 引言2. 数据类型、变量与常量2.1 数据类型2.2 变量2.3 常量2.4 案例1:使用变量和常量计算圆的面积 3. 运算符与表达式3.1 算术运算符3.2 关系运算符3.3 逻辑运算符3.4 位运算符3.5 案例2:使用运算符实现简单的逻辑判断…...

代码的形状:重构的方向

大概2周前写了一篇《代码的形状:从外到内的探索与实践》 涵树:代码的形状:从外到内的探索与实践 觉得这个话题还可以继续,它是一个从无形到有形的过程,而这个过程感觉就是王阳明先生说的“心即理”的探寻过程。 我讨论代码的形状&#xff…...

144.《在 macOS 上安装 Redis》

文章目录 在 macOS 上安装 Redis先决条件安装在前台启动和停止 Redis使用 launchd 启动和停止 Redis连接到 Redis后续步骤Next steps redis 官方安装教程是英文,本文只是将英文文档翻译成中文,方便大家阅读 redis官方安装教程:download redis…...

使用mysql报Communications link failure异常解决

背景 线上使用polarDB,基于mysql(5.7),架构为springbootmybatisplusdurid连接池,部分业务场景涉及大表更新和查询操作,在查询慢sql且超过一定时间时就会报出"Communications link failure"异常,主要体现在界…...

搭建一个fastapi的项目,调用ollama服务

1. 项目结构 my_project/ │ ├── app/ │ ├── main.py # FastAPI应用的入口 │ ├── services/ # 包含服务逻辑 │ │ └── ollama_service.py │ ├── models/ # 定义数据模型 │ │ └── response.py │ ├─…...

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录前言 🍃一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…...

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束,常见的Mapping属性包括: type:字段数据类…...

C#进阶-在Ubuntu上部署ASP.NET Core Web API应用

随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。ASP.NET Core 作为一个跨平台、高性能的框架,非常适合在 Linux 环境中运行。本篇博客将详细介绍如何在 Linux 服务器上部署 ASP.NET Core Web API 应用,包…...

执行这个composer require topthink/think-mongo 报错

安装tp5 mongodb扩展 执行这个composer require topthink/think-mongo 报错 解决方法: 1 把composer.json里的"overtrue/wechat": "4.2.11",注释掉再执行 2 composer require topthink/think-mongo1.* 安装mongo的1版本...

大语言模型训练数据集格式

1. SFT(有监督微调)的数据集格式 对于大语言模型的训练中,SFT(Supervised Fine-Tuning)的数据集格式可以采用以下方式: 输入数据:输入数据是一个文本序列,通常是一个句子或者一个段…...

stringRedisTemplate.execute执行lua脚本

stringRedisTemplate.execute执行lua脚本 1. 引入必要依赖 确保项目中已经引入了Spring Data Redis相关依赖&#xff0c;例如在 Maven 项目中&#xff0c;一般会有如下依赖&#xff08;版本号根据实际情况调整&#xff09;&#xff1a; <dependency><groupId>or…...

鸿蒙UI(ArkUI-方舟UI框架)

参考&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-layout-development-overview-V13 ArkUI简介 ArkUI&#xff08;方舟UI框架&#xff09;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff…...

Linux-蓝牙协议

SPP (Serial Port Profile): 串口协议&#xff08;SPP&#xff09;是一个蓝牙配置文件&#xff0c;允许设备通过蓝牙模拟传统的串行端口通信。它通常用于无线串口连接&#xff0c;允许设备如计算机和外设&#xff08;例如打印机或条形码扫描器&#xff09;之间进行数据传输。A…...

CES Asia 2025:科技盛宴即将开启,续写辉煌篇章

随着2025年国际消费类电子产品展览会&#xff08;CES&#xff09;在美国拉斯维加斯盛大开幕并展现出诸多令人瞩目的发展趋势&#xff0c;亚洲科技界也对即将到来的CES Asia 2025充满期待&#xff0c;一场科技盛宴即将在亚洲大陆续写辉煌。 在刚刚拉开帷幕的CES 2025上&#xff…...

tutorial3.c

这个教程程序展示了如何使用 libxlsxwriter 库向 Excel 文件中写入不同类型的数据&#xff0c;包括字符串、数字和日期。以下是程序的主要步骤和功能&#xff1a; 定义数据结构&#xff1a; 定义了一个 expense 结构体&#xff0c;包含三个成员&#xff1a;item&#xff08;项…...

C# 获取当前运行路径的6种实用方法

C# 获取当前运行路径的多种方法 在C#中&#xff0c;获取当前运行路径&#xff08;即程序的工作目录&#xff09;是常见的需求&#xff0c;尤其在处理文件读写、日志记录和配置文件时。不同的场景可能需要使用不同的方法来获取路径。本文将介绍几种常用的获取当前运行路径的方法…...

龙蜥Linux系统部署docker21.1.3版本

龙蜥系统配置docker环境 更新yum源 更新软件源中的包。 yum update安装底层工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云仓库 # 添加阿里云的docker镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/c…...

.NET中的框架和运行环境

在.NET生态系统中&#xff0c;框架和运行环境是两个不同的概念&#xff0c;它们各自扮演着重要的角色。 下面我将分别介绍.NET中的框架和运行环境&#xff0c;并解释它们之间的区别。 .NET 框架&#xff08;Frameworks&#xff09; 框架提供了一套预定义的类库、工具和服务&…...

STM32的存储结构

STM32F103 芯片是基于 ARM Cortex-M3 内核的微控制器&#xff0c;它集成了多种类型的存储器&#xff0c;每种存储器都有其特定的作用和存储对象。以下是关于 STM32F103 中 Flash、ROM 和 SRAM 的详细介绍&#xff1a; 1. Flash Memory (闪存) 作用&#xff1a;Flash 是非易失性…...

微信小程序

一、小程序文件结构 1.目录结构 pages文件夹&#xff1a;存放【页面文件夹】&#xff0c;一个【页面文件夹】就是一个页面&#xff0c;存放着小程序页面文件。即pages中的每一个文件夹都存放着一个小程序页面的文件&#xff08;js、wxml、json、wxss&#xff09; 页面文件夹…...

《CPython Internals》阅读笔记:p76-p95

《CPython Internals》学习第 5 天&#xff0c;p76-p95 总结&#xff0c;总计 20 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;1) 1.check vi/vt. to exam sth to ensure it is correct, true, or in good condition.示例&#xff1a; (1)After I’d finished …...

HOW - Form 表单 label 和 wrapper 对齐场景

一、背景 在日常使用 表单 时&#xff0c;我们一般有如下布局&#xff1a; 可以通过 Form 表单提供的配置直接设置&#xff1a; <Formform{form}labelCol{{ span: 4 }}wrapperCol{{ span: 20 }}onFinish{handleSubmit}><Form.Itemlabel"输入框"name"…...

Js的回调函数

一、什么是回调函数&#xff08;Callback&#xff09;&#xff1f; 回调函数&#xff08;Callback Function&#xff09;是指一个函数被作为参数传递给另一个函数&#xff0c;并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中&#xff0…...

FairGuard游戏安全2024年度报告

导 读&#xff1a;2024年&#xff0c;国内游戏市场实际销售收入3257.83亿元&#xff0c;同比增长7.53%&#xff0c;游戏用户规模6.74亿人&#xff0c;同比增长0.94%&#xff0c;市场收入与用户规模双双实现突破&#xff0c;迎来了历史新高点。但游戏黑灰产规模也在迅速扩大&…...

ant-design-vue 1.X 通过id获取a-input组件失败

1.ant-design-vue 1.X 问题描述 当我在a-form组件中&#xff0c;以v-decorator指令绑定表单组件时&#xff0c;无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…...

JVM vs JDK vs JRE

JVM是Java虚拟机的缩写&#xff0c; 用于实现Java的一次编译&#xff0c;处处运行。 Java代码写成.class后&#xff0c;由本地的虚拟机运行。 JDK&#xff08;Java Development Kit&#xff09;是一个功能齐全的 Java 开发工具包&#xff0c;供开发者使用。 JDK包含了JRE。…...

OpenCV相机标定与3D重建(47)从两幅图像中的一组匹配点恢复相机的姿态(旋转和平移)函数recoverPose()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从两幅不同相机拍摄的图像中对应的点恢复相对相机旋转和平移&#xff0c;使用手性检查。返回通过该检查的内点数量。 cv::recoverPose 是 OpenCV…...

代码随想录算法训练营day27

代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天&#xff0c;希望自己能够坚持下来&#xff01; 今日任务&#xff1a; ● 贪心算法理论基础 ● 455.…...

基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)

本篇技术博文摘要 &#x1f31f; 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤&#xff1b;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 &#x1f4d8; 在这个快速发展的技术时代&#xff0c;与时俱进是每个IT人的必修课。我…...

【数据结构】链表

目录 ​编辑 1.2链表 1.2.1 链表的特性 1.2.2 单向链表 遍历无头单向链表 遍历有头单向链表 链表尾插法练习 1.2.3 单向链表的函数操作 单向链表的特点&#xff1a; 1.2链表 链表又称单链表、链式存储结构&#xff0c;用于存储逻辑关系为“一对一”的数据。 和顺序表…...

RabbitMQ解决消息积压的方法

目录 减少发送mq的消息体内容 增加消费者数量 批量消费消息 临时队列转移 监控和预警机制 分阶段实施 最后还有一个方法就是开启队列的懒加载 这篇文章总结一下自己知道的解决消息积压得方法。 减少发送mq的消息体内容 像我们没有必要知道一个的中间状态&#xff0c;只需…...

机器学习是?

机器学习&#xff08;Machine Learning&#xff09;是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科; 是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;也是AI的核心领域&#xff0c;它专注于开发算法和模型&#…...

jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法

原因 解决方法&#xff1a;更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图&#xff1a;...

计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...