使用EDA架构部署在线外卖订单系统
1. 选择实验资源
本实验支持实验资源体验、开通免费试用、个人账户资源三种实验资源方式。
在实验开始前,请您选择其中一种实验资源,单击确认开启实验。
- 如果您选择的是实验资源体验,资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等)。
说明:实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
- 如果您选择的是开通免费试用,下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。
说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。
阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心。
2. 创建实验资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要3~5分钟。
3. 配置云服务器ECS
本步骤指导如何通过控制台远程连接ECS实例配置实验所需环境。
1. 登录并访问ECS控制台
【公共资源体验】请按如下步骤访问控制台
(1)双击打开远程桌面的Chromium网页浏览器。
(2)在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
(3)复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云服务器ECS控制台。
https://ecs.console.aliyun.com/
【个人账号资源】、【开通免费试用】请按如下步骤访问控制台
(1)在当前实验控制台操作区找到“云服务器ECS”卡片并点击
(2)直接在控制台操作区内打开ECS控制台,并进行后续操作
2. 在云服务器ECS控制台左侧导航栏中,选择实例与镜像>实例。
3. 在实例页面顶部,选择资源所在地域。
说明:您可以在云产品资源列表中查看到实验室分配的云服务器ECS所在地域。
4. 在实例页面,找到您创建的ECS实例,单击右侧操作列下的远程连接。
说明:您可以在云产品资源列表中查看到实验室分配的云服务器ECS的实例ID。
5. 在连接与命令对话框中,单击Workbench远程连接区域的立即登录。
6. 执行如下命令,下载Node.js安装包。
说明:本实验需要下载并安装Node.js V17.XX以上版本,手册内容以v17.4.0为例。
wget https://npm.taobao.org/mirrors/node/v17.4.0/node-v17.4.0-linux-x64.tar.xz
7. 执行如下命令,解压安装包并重命名。
tar -xvf node-v17.4.0-linux-x64.tar.xz && mv node-v17.4.0-linux-x64/ /usr/local/node
8. 执行如下命令,配置环境变量。
echo "export PATH=$PATH:/usr/local/node/bin" >> /etc/profile source /etc/profile
9. 执行如下命令,下载Demo文件的压缩包。
wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/Cloud_EventBridge_Demo-main.zip
10. 执行如下命令,安装unzip。
yum install unzip -y
11. 执行如下命令,解压Demo文件的压缩包。
unzip Cloud_EventBridge_Demo-main.zip
12. 执行如下命令,查看root目录下的文件。
ls
返回结果如下,Cloud_EventBridge_Demo-main就是本实验所使用的Demo文件。
4. 配置云数据库RDS MySQL版
本步骤指导您如何通过控制台创建云数据库RDS MySQL版实例,并通过控制台配置实验所需的账号、数据库和数据表。
- 登录云数据库RDS控制台。
1.1 【公共资源体验】复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库RDS控制台。
https://rdsnext.console.aliyun.com/
【个人账号资源】、【开通免费试用】直接点击RDS控制台,在控制台操作区打开
1.2 在左侧导航栏中,单击实例列表。
1.3 在实例列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看RDS资源所在的地域。
- 创建数据库。
2.1在实例列表页面,找到实验室分配的RDS资源,单击实例ID。
说明:您可在云产品资源列表中查看RDS的实例ID。
2.2 在基本信息页面,单击左侧导航栏的数据库管理。
2.3 在数据库管理页面。单击创建数据库。
2.4 在创建数据库对话框中,参考说明配置数据库信息,单击创建。
参数说明:
- 数据库(DB)名称:输入数据库名称,例如test123。
- 支持字符集:默认设为utf8。
- 备注说明:非必填。用于备注该数据库的相关信息,便于后续数据库管理,最多支持256个字符。
- 创建账号。
3.1 在数据库管理页面,单击左侧导航栏的账号管理。
3.2 在账号管理页面,单击创建账号。
3.3 在创建账号对话框中,参考说明配置账号信息,单击确定。
参数说明:
- 数据库账号:输入数据库账号名称,例如user123。
- 账号类型:选择普通账号。
- 授权数据库:将上一步中创建的数据库添加至已授权数据库列表中,并设置权限为读写(DDL+DML)。
- 密码:输入账号密码,例如Password123。
- 确认密码:再次输入账号密码。
- 申请外网地址。
4.1 在账号管理页面,单击左侧导航栏的数据库连接。
4.2 在数据库连接页面,单击开通外网地址。
4.3 在提示对话框中,选中将0.0.0.0/0加入白名单。单击确定。
- 创建表。
5.1 在数据库连接页面,单击登录数据库。
5.2 在登陆实例对话框中,输入您上一步创建的数据库账号和数据库密码,然后单击测试连接。
5.3 在成功对话框中,单击确认。
5.4 在登陆实例对话框中,单击登录。
5.5 在数据库实例区域,选择已登录实例>您的云数据库RDS MySQL版实例,然后双击您创建的数据库。
5.6 在SQL Console页签,输入如下SQL语句,单击执行(F8),创建名为test123的表。
CREATE TABLE `test123` ( `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `city` varchar(260) DEFAULT NULL, `address` varchar(260) DEFAULT NULL, `telephone` varchar(255) DEFAULT NULL, `country` varchar(255) DEFAULT NULL, `total` varchar(255) DEFAULT NULL, `state` varchar(255) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 ;
返回结果如下,表示您已成功创建实验所需要的表。
5.7在表区域,单击刷新图标。
返回结果如下,您可查看到新创建的表。
5. 创建消息服务MNS
本步骤指导您如何通过控制台创建消息服务MNS。
注意:本步骤的所有操作均在您自己的阿里云主账号下进行,您需要使用您自己的阿里云主账号开通消息服务MNS,云起实验室暂不支持提供消息服务MNS。消息服务MNS的计费项说明,详情请参见定价中心。
- 在您的本机浏览器中,登录并前往消息服务MNS控制台。
- 开通消息服务MNS。
说明:如果您已开通消息服务MNS,请忽略此步骤。
2.1 在概览页面,单击免费开通。
2.2 在消息服务MNS页面,选中《消息服务MNS服务协议》,单击立即开通。
返回如下页面,表示消息服务MNS开通成功。
- 创建队列。
3.1 在开通完成页面,单击管理控制台。
3.2 在左侧导航栏中,单击队列列表。
3.3 在队列列表页面顶部菜单栏中,选择地域所在地。
说明:消息服务MNS需要创建与事件总线EventBridge相同的地域的消息服务,本实验手册以华东1(杭州)为例。
3.4 在队列列表页面,单击创建队列。
3.5 在创建队列对话框中,输入名称,例如test,其他配置保持默认即可,单击确定。
3.6 在队列列表页面,找到您创建的队列,单击右侧操作列下的详情。
返回如下页面,您可查看到队列的的相关信息,其中名称和接入点中的地域将会在Demo配置文件中使用。
6. 创建事件总线EventBridge
本步骤指导您如何通过控制台创建事件总线EventBridge。
注意:本步骤的所有操作均在您自己的阿里云主账号下进行,您需要使用您自己的阿里云主账号开通事件总线EventBridge,云起实验室暂不支持提供事件总线EventBridge。事件总线EventBridge的计费项说明,详情请参见计费说明。
- 前往事件总线EventBridge控制台。
- 开通事件总线EventBridge。
说明:如果你已开通事件总线EventBridge,请忽略此步骤。
2.1 在概览页面,单击免费开通。
2.2 在提示对话框中,单击确定。
2.3 在事件总线EventBridge开通页面,选中《事件总线EventBridge(按量付费)服务协议》,单击立即开通。
2.4 在事件总线EventBridge开通页面,单击关闭。
2.5 在概览页面,单击刷新。
2.6 在概览页面,选中全部角色,单击授权。
返回如下页面,表示您已开通事件总线EventBridge并完成授权。
- 创建事件总线EventBridge。
4.1 在左侧导航栏中,单击事件总线。
4.2 在事件总线页面,单击自定义事件总线的快速创建。
4.3 在创建自定义事件总线面板的总线中,输入自定义事件总线名称和描述,例如自定义事件总线名称为test,描述为test123,单击下一步。
4.4 在创建自定义事件总线面板的事件源中,输入事件源名称,例如mnstest,时间提供方选择消息服务MNS。
4.5 在阿里云服务授权-消息服务MNS对话框中,单击确定。
说明:如果您已授权过消息服务MNS,请忽略此步骤。
4.6 在创建自定义事件总线面板的事件源中,队列名称选择您刚刚创建的队列,取消选中开启Base64解码(注意:这一步一定要去掉选中,否则后面流程会走不通),单击下一步。
4.7 在创建自定义事件总线面板的规则中,输入规则名称,例如ruletest,单击下一步。
4.8 在创建自定义事件总线面板的规则中,单击跳过。
4.9 在直接创建自定义事件总线对话框中,单击确定。
返回如下页面,表示您已成功创建事件总线EventBridge。
7. 配置事件总线EventBridge
本步骤指导您如何配置事件总线EventBridge。
- 配置钉钉目标。
1.1 打开您的钉钉群聊。
1.2 在群聊中,单击右上角的 群设置图标。
1.3 在群设置面板,单击智能群助手。
1.4 在智能群助手面板,单击添加机器人。
1.5 在群机器人面板,单击添加机器人右侧的 设置图标。
1.6 在群机器人面板,单击自定义。
1.7 在机器人详情面板,单击添加。
1.8 在添加机器人面板,输入机器人名字,例如测试。选中安全设置中的加签,然后单击复制,将密钥粘贴到您本机的任意文本文档中。选中我已阅读并同意《自定义机器人服务及免责条款》,单击完成。
说明:密钥在配置钉钉事件目标时需要使用。
1.9 在添加机器人面板,单击Webhook右侧的复制,将Webhook地址粘贴到您本机的任意文本文档中,单击完成。
注意:
- 请保管好此Webhook地址,不要公布在外部网站上,泄露有安全风险。
- Webhook地址在配置钉钉事件目标时需要使用。
返回如下结果,表示您已成功添加群机器人。
1.10 切换至事件总线EventBridge控制台页签。在左侧导航中,单击事件规则。
1.11 在事件规则页面,单击创建规则。
1.12 在创建规则面板的配置基本信息中,输入名称,例如dingtalk,单击下一步。
1.13 在创建规则面板的配置事件模式中,单击下一步。
1.14 在创建规则面板的配置事件目标中,参考如下说明配置事件目标,然后单击创建。
配置说明:
- 服务类型:选择钉钉asc.dingtalk。
- 地址:输入您添加的机器人的Webhook地址。
- 密钥:输入您添加的机器人的密钥。
- 变量:在本实验中,添加如下变量声明。
{ "name":"$.data.messageBody.name", "country":"$.data.messageBody.country", "total":"$.data.messageBody.total", "address":"$.data.messageBody.address", "city":"$.data.messageBody.city", "telephone":"$.data.messageBody.telephone", "email":"$.data.messageBody.email", "state":"$.data.messageBody.state" }
- 模板:在本实验中,添加如下模板。
{ "msgtype": "markdown", "markdown": { "title":"订单推送通知", "text": "## 订单推送通知 \n 用户名:${name} \n 订单金额:${total} \n 订单地城市:${city} \n 详细地址:${address} \n 电话:${telephone} \n 订单状态:${state}" } }
返回如下页面,表示您已成功在事件总线EventBridge中添加钉钉目标。
- 配置数据库目标-新订单创建。
2.1 在事件规则页面,单击创建规则。
2.2 在创建规则面板的配置基本信息中,输入名称,例如rds-create,单击下一步。
2.3 在创建规则面板的配置事件模式中,在模式内容中添加如下内容,单击下一步。
{ "data": { "messageBody": { "state": [ "未送达" ] } } }
说明:在事件模式的模式内容填写的判断是本次实验的重点,通过此判断可以决定后续数据是否为新建订单的,如果是新建订单即状态为“未送达”则插入新数据,如果是老订单即状态为“已送达”则需更新相关状态到老订单。本条规则需配置未送达规则。
2.4 在创建规则面板的配置事件目标中,参考如下说明配置事件目标,然后单击创建。
配置说明:
- 服务类型:选择数据库asc.rds.mysql。如果弹出阿里云服务授权-RDS,用来完成数据投递至RDS对话框时,单击确定即可。
- 数据库配置:选择自建MySql。
- 数据库地址:输入实验室分配的云数据库RDS MySQL版实例的外网地址。
- 数据库名称:输入您创建的数据库名称。
- 数据库账号:输入您创建的数据库账号。
- 数据库密码:输入您创建的数据库账号的密码。
- 并发配置:在本实验中,输入1。
- 网络配置:选择公网。
- 入库配置:选择自定义SQL。
- 变量:在本实验中,添加如下变量声明。
{ "tableName": "test123", "column1": "name", "column1_value": "$.data.messageBody.name", "column2": "email", "column2_value": "$.data.messageBody.email", "column3": "city", "column3_value": "$.data.messageBody.city", "column4": "address", "column4_value": "$.data.messageBody.address", "column5": "telephone", "column5_value": "$.data.messageBody.telephone", "column6": "country", "column6_value": "$.data.messageBody.country", "column7": "total", "column7_value": "$.data.messageBody.total", "column8": "state", "column8_value": "$.data.messageBody.state" }
- SQL语句:在本实验中,添加如下SQL语句。
INSERT INTO ${tableName} (${column1},${column2},${column3},${column4},${column5},${column6},${column7},${column8}) VALUES('${column1_value}','${column2_value}','${column3_value}','${column4_value}','${column5_value}','${column6_value}','${column7_value}','${column8_value}')
返回如下页面,表示您已成功在事件总线EventBridge中添加数据库目标-新订单创建。
- 配置数据库目标-更新订单。
3.1 在事件规则页面,单击创建规则。
3.2 在创建规则面板的配置基本信息中,输入名称,例如rds-update,单击下一步。
3.3 在创建规则面板的配置事件模式中,在模式内容中添加如下内容,单击下一步。
{ "data": { "messageBody": { "state": [ "已送达" ] } } }
说明:在事件模式的模式内容填写的判断是本次实验的重点,通过此判断可以决定后续数据是否为新建订单的,如果是新建订单即状态为“未送达”则插入新数据,如果是老订单即状态为“已送达”则需更新相关状态到老订单。本条规则需配置已送达规则。
3.4 在创建规则面板的配置事件目标中,参考如下说明配置事件目标,然后单击创建。
配置说明:
- 服务类型:选择数据库asc.rds.mysql。如果弹出阿里云服务授权-RDS,用来完成数据投递至RDS对话框时,单击确定即可。
- 数据库配置:选择自建MySql。
- 数据库地址:输入实验室分配的云数据库RDS MySQL版实例的外网地址。
- 数据库名称:输入您创建的数据库名称。
- 数据库账号:输入您创建的数据库账号。
- 数据库密码:输入您创建的数据库账号的密码。
- 并发配置:在本实验中,输入1。
- 网络配置:选择公网。
- 入库配置:选择自定义SQL。
- 变量:在本实验中,添加如下变量声明。
{ "tableName": "test123", "column1": "state", "column1_value": "$.data.messageBody.state", "column2": "id", "column2_value": "$.data.messageBody.id" }
SQL语句:在本实验中,添加如下SQL语句。
UPDATE `${tableName}`.`${tableName}` SET `${column1}`='${column1_value}' WHERE `${column2}`=${column2_value};
返回如下页面,表示您已成功在事件总线EventBridge中添加数据库目标-新订单创建。
8. 运行Demo并体验超级外卖订单系统
本步骤带您体验超级外卖订单系统。
- 配置Demo的配置文件。
1.1 切换至实验室的云服务器ECS的终端页面。
1.2 执行如下命令,进入Cloud_EventBridge_Demo-main/controllers目录。
cd Cloud_EventBridge_Demo-main/controllers
1.3 执行如下命令,将文件ali-config-sample.json重命名为ali-config.json
mv ali-config-sample.json ali-config.json
1.4 执行如下命令,修改ali-config.json配置文件。
vim ali-config.json
1.5 按i键切换至编辑模式,参考如下说明配置参数。
参数说明:
- accountid:填写您的阿里云主账号的账号id(uid),请勿填写成实验室提供的子账号的uid。
- region:填写消息服务MNS的队列所在地域。例如cn-hangzhou。
- accessKeyId:填写您的阿里云主账号的AccessKey ID。请在安全信息管理页面查看您账号的AccessKey ID和AccessKey Secret,请勿填写成实验室提供的子账号的AK ID。
- accessKeySecret:填写您的阿里云主账号的AccessKey Secret。请在安全信息管理页面查看您账号的AccessKey ID和AccessKey Secret,请勿填写成实验室提供的子账号的AK Secret。
- queuename:填写消息服务MNS的队列的名称。例如test。
- host:填写实验室提供的云数据库RDS MySQL版实例的外网地址。数据库RDS MySQL版实例的外网地址的查询位置为云数据库RDS控制台>RDS实例>数据库链接>外网地址。
- port:数据库端口默认为3306。
- user:填写您创建的数据库用户名。例如user123。
- password:填写您创建的数据库用户名的密码。例如Password123。
- database:填写您创建的数据库名。例如test123。
- tablename:填写表名,在本实验中填写test123。
1.6 修改完成后,按下Esc键后,输入:wq并回车,保存并退出配置文件。
- 运行Demo。
2.1 执行如下命令,进入Cloud_EventBridge_Demo-main目录。
cd /root/Cloud_EventBridge_Demo-main
2.2 执行如下命令,配置阿里巴巴镜像地址。
npm config set registry https://registry.npmmirror.com
2.3 执行如下命令,安装依赖。
注意:如果出现报错,你需要再次执行安装依赖的命令。
npm i
2.4 执行如下命令,启动服务。
node app.js
2.5 在您的浏览器中打开新页签,在地址栏中输入并访问https//<ECS公网地址>:3000。
说明:您需要在将<ECS公网地址>替换为实验室分配的云服务器ECS的公网地址,您可在云产品资源列表中查看到实验室分配的云服务器ECS的公网地址。
返回如下页面,表示您已成功访问外卖下单系统。
- 体验客户侧。
3.1 在外卖下单系统页面,单击客户侧。
3.2 在菜品选择页面,选择任意菜品并设置购买数量,然后单击Add to cart。
3.3 在购物车页面,单击Go To Checkout。
3.4 在结算页面的用户联系方式明细区域,填写相关信息,然后单击Sumbit。
返回如下页面,表示下单成功,同时在钉钉中收到订单信息。
- 体验商户侧。
在外卖下单系统页面,单击商户侧。
返回如下页面,在商户订单页面可以查询到所有订单。
- 体验骑手侧。
5.1 在外卖下单系统页面,单击骑手侧。
5.2 在骑手页面,选择任意一条订单,单击右侧操作列下的订单送达。
5.3 在商户订单页面可以看到订单状态变为已送达,钉钉中也推送相关订单通知。
9. 释放资源
在实验完成后,请您及时释放事件总线EventBridge和消息服务MNS相关资源,避免继续产生费用。
- 释放事件总线EventBridge。
1.1 在事件源页签中,找到您创建的事件源,单击删除。
1.2 在事件规则页签中,找到您创建的规则,在右侧操作列下选择更多>删除,依次删除三个规则。
1.3 在事件总线页面,找到您创建的事件总线,单击删除。
- 释放消息服务MNS。
在消息服务MNS控制台的队列列表页面,找到您创建的队列,单击删除。
实验链接:https://developer.aliyun.com/adc/scenario/18b46d02239441cfa1538bf6b9d3e200