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

embedded/2025/1/15 4:48:41/

实验目的

通过完成本实验,在 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用户。


http://www.ppmy.cn/embedded/154019.html

相关文章

抖音集团数据血缘深度应用:架构、指标与优化实践

导读 本文简单介绍了“抖音集团数据资产管理平台”全貌,数据资产管理平台是抖音集团在复杂业务场景中思考的新方向,启发大家对于元数据以及数据资的全新思考。文章重点展开介绍了“抖音集团大数据血缘的演进和应用”部分,让大家以更宏观视角认识血缘,并在如何建设好数据血缘…

4. scala高阶之隐式转换与泛型

背景 上一节,我介绍了scala中的面向对象相关概念,还有一个特色功能:模式匹配。本文,我会介绍另外一个特别强大的功能隐式转换,并在最后介绍scala中泛型的使用 1. 隐式转换 Scala提供的隐式转换和隐式参数功能&#…

NLP三大特征抽取器:CNN、RNN与Transformer全面解析

引言 自然语言处理(NLP)领域的快速发展离不开深度学习技术的推动。随着应用需求的不断增加,如何高效地从文本中抽取特征成为NLP研究中的核心问题。深度学习中三大主要特征抽取器——卷积神经网络(Convolutional Neural Network, …

vue集成导出 txt文本文档 和 excel文档 的方法

1、导出txt文档方法 &#xff08;1&#xff09;在template中定义方法 <template> <li><el-button class"download" type"success" click"download">下载</el-button> </li> </template>&#xff08;2&…

MR30分布式 IO 在物流分拣线的卓越应用

在当今物流行业高速发展的时代&#xff0c;物流分拣线的高效与精准运作至关重要&#xff0c;而其中对于货物点数较多情况下的有效控制更是一大关键环节。明达技术MR30分布式 IO 系统凭借其独特的优势&#xff0c;在物流分拣线中大放异彩&#xff0c;为实现精准的点数控制提供了…

RK3568笔记七十二:WIFI管理操作方法测试

若该文为原创文章,转载请注明原文出处。 正点原子的 RK3568 平台默认使用 connman 管理 WiFi ,而且 WiFi 的核心进程 wpa_supplicant 的 启动。正点原子手册提供了测试方法。 注意,正点原子默认 wlan0

【Rust】数据类型

目录 思维导图 1. 数据类型概述 1.1 标量类型 1.1.1 整数类型 1.1.2 浮点数类型 1.1.3 布尔类型 1.1.4 字符类型 1.2 复合类型 1.2.1 元组类型 1.2.2 数组类型 2. 类型注解与类型推断 3. 整数溢出处理 4. 数字运算 5. 示例 思维导图 1. 数据类型概述 Rust是一种静…

【嵌入式常识篇】一个C项目工程在IDE中是怎么一步步编译成一个固件包的

前言&#xff1a;初学C语言的时候是在Linux环境下&#xff0c;那时候只知道需要通过GCC工具编译成可执行文件才可以在运行&#xff0c;后来进入到了嵌入式行业发现需要IDE将一个C项目工程编译成一个固件包&#xff0c;那时候经常会产生一个疑问&#xff1a;一个C项目工程在IDE中…