前言
TODO:新建项目和应用,开通云函数服务(AGC)
端侧开发:Arkts界面开发
云测开发:云函数、认证服务、云存储、云数据库
一、登录
地址:https://id1.cloud.huawei.com/CAS/portal/loginAuth.html?reqClientType=89&loginChannel=89000500®ionCode=cn&loginUrl=https%3A%2F%2Fid1.cloud.huawei.com%3A443%2FCAS%2Fportal%2FloginAuth.html&lang=zh-cn&themeName=red&clientID=6099200&state=6475652&service=https%3A%2F%2Foauth-login1.cloud.huawei.com%2Foauth2%2Fv2%2FloginCallback%3Faccess_type%3Doffline%26client_id%3D6099200%26display%3Dpage%26flowID%3D0a8a7027000001d17220498962333586%26h%3D1722049896.2350%26lang%3Dzh-cn%26redirect_uri%3Dhttps%253A%252F%252Fdeveloper.huawei.com%252Fconsumer%252Fcn%252Fservice%252Fjosp%252Fagc%252FhandleAllianceLogin.html%26response_type%3Dcode%26scope%3Dopenid%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fcountry%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fbase.profile%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Floginid%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Faccount.flags%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Frealname%252Fstate%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Frealname%252Fidentity%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Frealname%252Fctf.type%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fstate.register%2Bhttps%253A%252F%252Fwww.huawei.com%252Fauth%252Faccount%252Fanonymous.mobile%26state%3D6475652%26v%3D3ceb962d429ac960ada527fb822d9924d121e8dd37f0f7e61b8f77d68858b485&validated=true
二、新建项目
登录后点击我的项目:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/
新建项目》点击添加项目》输入项目名称》点击创建并继续
关闭分析服务,点击完成。
三、开通云函数服务
左侧菜单找到云函数并点击并点击立即开通
数据处理位置选择中国设置为默认并点击确定
四、创建应用
点击左侧菜单中的项目设置后 ,点击添加应由
在添加应用中的选择App(HarjmonyOS)平台,并点击下方的APP ID
设置应用信息后,点击下一步后,并点击确认
查看项目设置,已经存在应用信息
五、DevEco创建端云一体化应用
新建项目,选择端云一体化模版后点击next
注意:使用DevEco创建应用的包名需要与在AGC网站上创建的应用包名一致。 设置完成后,点击next
如果设置的包名与AGC网站上的一致的话,DevEco将会自动关联在AGC网站上创建的应用。 点击Finish后,应用创建完成。
六、创建云函数
选中cloudFunctions右键添加cloud Function 起名为:test 点击OK
七、云函数代码结构介绍
可以出发云函数的时机: http请求 云数据库(可以在插入数据时触发云函数...) 云存储 (可以在上传文件时触发云函数...)
/* event:表示输入的信息 context:云函数执行时,上下文信息(如:环境变量) callback:输出(返回结果) logger:记录日志(四个级别:debug、info、warn、error) */ let myHandler = async function (event, context, callback, logger) { logger.info(event); // do something here callback({ code: 0, desc: "Success." }); }; export { myHandler };
八、云函数编写
let myHandler = async function (event, context, callback, logger) { // 打印输入的信息,因为传递的内容可能是一个对象,所以使用JSON方法解析 logger.info(JSON.stringify(event)); // 返回的内容 callback({ code: 0, message: "Cloud Function test" }); }; // 暴露 export { myHandler };
八、云函数运行
调用云函数有两种方法: 1、 本地部署测试 2 、云端部署测试
1.1.1. 本地部署测试
cloudfunctions右键 Run cloud functions 查看控制台获取到url: http://localhost:18090/test/invoke.
PostMan测试并查看日志信息
1.1.2. 云端部署测试
cloudFunctions目录右键选择deploy cloud functions 注意:在上传云端时,devEco需要登录华为账号
云端查看
点击测试
九、端侧调用云函数
1.1. 添加依赖
entry目录下的oh-package.json5 // 添加:主要前2个依赖 "dependencies": { "@hw-agconnect/cloud": "^1.0.0", "@hw-agconnect/hmcore": "^1.0.0", "@hw-agconnect/auth-component": "^1.0.0", "long": "5.2.1" }
1.2. 初始化AGConnect
// 修改EntryAbility.ets文件 // 初始化方法一: import {initialize} from "@hw-agconnect/hmcore" import jsonStr from "../../resources/rawfile/agconnect-services.json" onCreate(){ try { initialize(this.context,jsonStr) }catch (e){ console.error(JSON.stringify(e)) } }
// 修改EntryAbility.ets文件 // 初始化方法二: import {initialize} from "@hw-agconnect/hmcore" onCreate(){ // 初始化 const context = this.context const value = await context.resourceManager.getRawFileContent("agconnect-services.json") let json:string= buffer.from(value).toString("utf8") console.log(json) initialize(this.context,json) }
1.3. ArkTS界面开发
// 在pages目录中创建一个MyIndexd.ets页面,并添加一个按钮从而出发云函数 @Entry @Component struct MyIndex { build() { Column(){ Button("调用test云函数").onClick(()=>{ }) }.width("100%").height("100%") } }
1.4. ArkTS调用云函数
// 使用按钮添加单击事件,引入cloud对象来调用云函数 import cloud from '@hw-agconnect/cloud' @Entry @Component struct MyIndex { @State message:string = "test" build() { Column(){ Button("调用test云函数").onClick( async()=>{ console.log("s") const result = await cloud.callFunction({ name:'test', // 云函数名称 version:"$latest", // 云函数版本,$latest表示为最新版 params:{} // 传递参数 }) this.message =result.getValue().message }) Text(this.message) }.width("100%").height("100%") } }
九、云函数传参
TODO 添加一个文本输入框,将输入框中的内容发送到test云函数中,并返回到页面的文本框中
1.1.1. 界面:
import cloud from '@hw-agconnect/cloud' @Entry @Component struct MyIndex { @State message:string = "abcv" @State name:string = "" build() { Column({space:20}){ TextInput({placeholder:"请输入姓名"}).width("80%").height(60).margin({top:20}) .onChange((value)=>{this.name = value}) Button("调用test云函数").onClick( async()=>{ console.log("s") const result = await cloud.callFunction({ name:'test', version:"$latest", params:{name:this.name} }) this.message =result.getValue().message }) Text(this.message) }.width("100%").height("100%") } }
1.1.2. 云函数:
// body 为JSON结构,需要通过JSON进行转换 let myHandler = async function (event, context, callback, logger) { logger.info(JSON.stringify(event)); const name =JSON.parse( event.body) .name callback({ code: 0, message: `hello ${name}` }); }; export { myHandler };
1.1.3. 更新
cloudFunctions目录右键选择deploy cloud functions
九、云函数-环境变量
- 云函数代码
// 环境变量存在于context的env中 // 编辑后并上传云中 let myHandler = async function (event, context, callback, logger) { logger.info(JSON.stringify(event)); const name =JSON.parse( event.body) .name const content = context.env.content callback({ code: 0, message: `hello ${name},content=${content}` }); }; export { myHandler };
- 环境变量配置地址
https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/myProject/388421841222342858/9249519184595931747?appId=5765880207854995971
- 设置环境变量值,并保存
- 效果
九、云函数-流量处理
1. 负载均衡
四种方式: 随机:产生随机数并通过取余的方法来判断最后调用哪个实例 轮询:按顺序依次调用 最少连接:多个实例中,选择请求量最小的实例进行调用 最短响应:多个实例中,选择响应时间最快的实例
2. 重试
当请求云函数超过设置的请求时间时,还想让该请求进行实例的访问,就可以设置重试 重试功能的三种策略: zero:请求失败,立即发起重试,没有重试时间间隔 constant:请求失败,发起重试,可以设置重试时间间隔 jittered:请求失败,发起重试,可是设置重试时间间隔,间隔时间依次等差递增
3. 熔断
熔断:当开发函数熔断后,只要函数满足了熔断的某些条件后,该函数进不对外进行服务 熔断请求阈值:10s内请求次数大于设置的值,则开启熔断 熔断错误百分比阈值:10s内错误请求占比大于等于设置的值就会开发熔断 熔断时长:假设设置熔断时长为:10,则表示熔断10s后熔断状态就变为半熔断状态 半熔断状态:在该状态下,熔断器会尝试恢复服务调用方对服务的调用,允许部分请求可以调用该服务,当调用服务成功次数达到一定次数后,则可以关闭熔断。