鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇

news2024/11/19 20:40:27

前言

TODO:新建项目和应用,开通云函数服务(AGC)
端侧开发:Arkts界面开发
云测开发:云函数、认证服务、云存储、云数据库

一、登录

地址:https://id1.cloud.huawei.com/CAS/portal/loginAuth.html?reqClientType=89&loginChannel=89000500&regionCode=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#/

image.png

新建项目》点击添加项目》输入项目名称》点击创建并继续

image.png
image.png

关闭分析服务,点击完成。

image.png

三、开通云函数服务

左侧菜单找到云函数并点击并点击立即开通

image.png

数据处理位置选择中国设置为默认并点击确定

image.png
image.png

四、创建应用

点击左侧菜单中的项目设置后 ,点击添加应由

image.png

在添加应用中的选择App(HarjmonyOS)平台,并点击下方的APP ID

image.png

设置应用信息后,点击下一步后,并点击确认

image.png

查看项目设置,已经存在应用信息

image.png

五、DevEco创建端云一体化应用

新建项目,选择端云一体化模版后点击next

image.png

注意:使用DevEco创建应用的包名需要与在AGC网站上创建的应用包名一致。
设置完成后,点击next

image.png

如果设置的包名与AGC网站上的一致的话,DevEco将会自动关联在AGC网站上创建的应用。
点击Finish后,应用创建完成。

image.png
image.png

六、创建云函数

选中cloudFunctions右键添加cloud Function
起名为:test
点击OK

image.png
image.png

七、云函数代码结构介绍

可以出发云函数的时机:
  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 、云端部署测试

本地部署测试
cloudfunctions右键 Run cloud functions
查看控制台获取到url: http://localhost:18090/test/invoke.

image.png
image.png

PostMan测试并查看日志信息

image.png
image.png

云端部署测试
cloudFunctions目录右键选择deploy cloud functions
注意:在上传云端时,devEco需要登录华为账号

image.png

云端查看

image.png

点击测试

image.png
image.png
image.png

九、端侧调用云函数

添加依赖
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"
  }

初始化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)
  }

ArkTS界面开发
// 在pages目录中创建一个MyIndexd.ets页面,并添加一个按钮从而出发云函数
@Entry
@Component
struct MyIndex {

  build() {
    Column(){
      Button("调用test云函数").onClick(()=>{

      })
    }.width("100%").height("100%")
  }

}

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%")
  }

}

image.png

九、云函数传参

TODO 添加一个文本输入框,将输入框中的内容发送到test云函数中,并返回到页面的文本框中

界面:
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%")
  }

}

云函数:
// 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 };

更新
cloudFunctions目录右键选择deploy cloud functions

image.png

九、云函数-环境变量

  1. 云函数代码
// 环境变量存在于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 };
  1. 环境变量配置地址
https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/myProject/388421841222342858/9249519184595931747?appId=5765880207854995971

image.png

  1. 设置环境变量值,并保存

image.png

  1. 效果

image.png

九、云函数-流量处理

负载均衡

image.png

四种方式:
随机:产生随机数并通过取余的方法来判断最后调用哪个实例
轮询:按顺序依次调用
最少连接:多个实例中,选择请求量最小的实例进行调用
最短响应:多个实例中,选择响应时间最快的实例

重试

image.png

当请求云函数超过设置的请求时间时,还想让该请求进行实例的访问,就可以设置重试
重试功能的三种策略:
zero:请求失败,立即发起重试,没有重试时间间隔
constant:请求失败,发起重试,可以设置重试时间间隔
jittered:请求失败,发起重试,可是设置重试时间间隔,间隔时间依次等差递增

熔断

image.png

熔断:当开发函数熔断后,只要函数满足了熔断的某些条件后,该函数进不对外进行服务
熔断请求阈值:10s内请求次数大于设置的值,则开启熔断
熔断错误百分比阈值:10s内错误请求占比大于等于设置的值就会开发熔断
熔断时长:假设设置熔断时长为:10,则表示熔断10s后熔断状态就变为半熔断状态
半熔断状态:在该状态下,熔断器会尝试恢复服务调用方对服务的调用,允许部分请求可以调用该服务,当调用服务成功次数达到一定次数后,则可以关闭熔断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1955074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx周末部署

背景 Nginx是本人学习的一类中间件,上次完成了vue的搭建,所以顺便把项目加入Nginx吧 1. 镜像拉取与测试 查询dockerHub,选择最新最稳定的版本 docker pull nginx:stable-perl 执行下载 docker run -d --name mynginx -p 8080:80 -v D:\IM…

【Kubernetes】配置管理(一):ConfigMap

配置管理(一):ConfigMap 1.配置管理2.使用 ConfigMap 管理 Pod 的配置信息2.1 创建 ConfigMap2.1.1 在命令行中通过指定 ConfigMap 的参数进行创建2.1.2 通过指定的配置文件创建 ConfigMap2.1.3 通过一个文件内的多个键值对创建 ConfigMap2.1…

C++数据结构重要知识点(3)(红黑树及其插入操作)

1.红黑树和AVL树的区别 红黑树和AVL树都是平衡树,都是为了解决二叉搜索树的劣势。其中,AVL树的左右子树的高度差不超过1,而红黑树的最长路径不超过最短路径的二倍,也就是说,红黑树是一种近似平衡,而AVL树是…

【设计模式】(万字总结)深入理解Java中的创建型设计模式

1. 前言 在软件开发的世界里,设计模式是一种被广泛接受并应用的解决方案。它们不仅仅是代码的设计,更是对问题的思考和解决的方法论。在Java开发中,特别是在面向对象的编程中,设计模式尤为重要。创建型设计模式,作为设…

JavaScript安全编程宝典【万字详解】

文章目录 简介基本说明特点两种使用方式在script中写使用script标签引入JS文件 数据类型介绍特殊值 运算符算数运算符赋值运算符逻辑运算符:条件运算符 数组的定义基本使用数组的遍历 函数含义函数定义方式基本语法代码示例 细节和注意事项 自定义对象Object形式{} …

解决mysql数据库表读取中文乱码问题

本文目录 0、省流1、问题出现2、问题排查3、结论 0、省流 在服务器上创建数据库服务时,使用的sql脚本加载的数据库表,其中脚本中有一些预设的测试数据包含中文汉字,由于linxu服务器控制台默认编码是lantin1,导致中文通过该编码方…

鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南

文章目录 一、消息提示框(showToast)1、导入模块2、语法3、参数4、示例5、效果 二、对话框(showDialog)1、导入模块2、语法3、参数4、示例5、效果 三、警告弹窗(AlertDialog)1、语法2、参数3、AlertDialogP…

JDBC(Java访问数据库)

Java Database Connectivity:Java访问数据库的解决方案 JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数…

科普文:科普文:springcloud之-Hystrix服务容错

Hystrix概念 Hystrix 服务容错保护 的概念和说明 这就是大名鼎鼎的:豪猪 豪猪的英文就是:Hystrix,国外一些大牛的程序员在给自己的架构起名字的时候,往往就这么特别。哪天咱们中国人自己也能写出些架构,咱们就按照中…

⚒linux通过shell脚本上传文件至minio中

🔴大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 之前数据库是备份到了七牛云上了,但是眼看着数据库文件越来越大,七牛云里面的余额越来越少,所以,转移阵地。 家里的nas&…

昇思25天学习打卡营第20天|munger85

GAN图像生成 生成对抗网络中是为了让我们生成的东西向期望的那样,就是为了让生成的东西很像,真的,例如用它来画画。就是描述整个网络的逻辑和目的,它有两部分组成,一个是生成器,一个是辨别器。他希望的是辨…

C++程序编程中的 SetWindowLong 函数的几个常见用途(附源码)

目录 1、API函数SetWindowLong说明 2、修改窗口风格 3、给窗口指定新的窗口消息处理函数,以拦截窗口消息 4、可以给窗口设置关联的UserData数据,方便在窗口内部使用这些数据 5、64位程序中需要使用SetWindowLongPtr 6、最后 C++软件异常排查从入门到精通系列教程(专栏…

Sping项目只能勾选17和21 (已解决) 导致的后续Invalid bound statement (not found):

问题发现 今天创建项目的时候发现 idea初始化spring的时候选择不了Java8 解决方案:替换URL为 https://start.aliyun.com/ 将IDEA页面创建Spring项目,其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。 将https://start.spr…

TortoiseSVN安装使用教程(超详细)

目录 前言1. 下载2. 安装2.1 安装TortoiseSVN(看图操作)2.2 安装语言包(看图操作) 3. 使用3.1 版本库浏览器3.2 其他教程 前言 TortoiseSVN:(俗称小乌龟)Subversion版本控制系统的一个免费开源客…

Pytorch基础:Tensor的view方法(非连续张量也可以使用view)

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中,view是Tensor的一个重要方法,用于返回一个改变了形状,但数据和数据的顺序与原来一致的新张量,但是新张…

夸克Android一面凉经(2024)

夸克Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《夸克Android一面凉经(2024)》。 面试职位: 智能信息-客户端开发工程师-夸克小说 技术一…

20240728 每日AI必读资讯

Google Gemini 聊天机器人更新 可以免费使用Gemini 1.5 Flash 1. 引入Gemini 1.5 Flash模型: • 提供更快和更高质量的响应。 • 提升推理和图像理解能力。 • 上下文窗口扩大到 32Ktokens,允许进行更长的对话和处理更复杂的问题。 • 即将支持通过 Goo…

【你也能从零基础学会网站开发】 SQL结构化查询语言应用基础-- SQL Server数据库开发创建表之FOREIGN KEY外键约束完全详解最详细!

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 浅谈FOREIGN K…

故障诊断 | CNN-LSSVM卷积神经网络结合最小二乘支持向量机故障诊断(Matlab)

效果一览 文章概述 故障诊断 | CNN-LSSVM卷积神经网络结合最小二乘支持向量机故障诊断(Matlab) 模型描述 使用CNN进行特征提取: 使用CNN模型对数据进行训练,通常是图像数据。 通过CNN的卷积层和池化层提取图像的特征。 将提取到的特征作为输入,可以是全连接层的输出或者卷…

系统架构师考点--系统架构设计(上)

大家好。今天我来总结一下系统架构设计相关的考点。这块考点是重中之重,每年上午场客观题占20-25分左右,下午案例题也会考到,下午论文也会考到。大家要好好学学这部分内容。 一、软件架构概述 软件架构是指从需求分析到软件设计之间的过渡过…