首页 » 网站推广 » php离线剧本技巧_无做事器架构serverless实践

php离线剧本技巧_无做事器架构serverless实践

访客 2024-11-17 0

扫一扫用手机浏览

文章目录 [+]

Serverless架构

无做事器架构即FAAS是未来云做事的发展趋势,目前每个云厂商都在用自己的办法推出了干系的产品。
本文无意谈论已经被广泛认知的架构理论,而是从详细工程实践过程来阐述如何利用FAAS模式来实现无做事器架构。
本文涉及的工程实践是基于腾讯云供应的serverless平台(函数做事),虽然腾讯云供应了干系的文档和示例代码,但是经由研究创造还是存在一些不明确的地方,特殊是对JAVA措辞的实现解释就更少了,我经由几天的摸索,终于完成了全流程,在此记录一下,也给喜好探索新技能的同学供应一些帮助。

php离线剧本技巧_无做事器架构serverless实践

开通“云函数”

登录腾讯云的“掌握台”,在“云产品”列表中的“serverless”下面选择“云函数”进入到云函数管理页。
这里可以总览运行在serverless平台上的云函数。

php离线剧本技巧_无做事器架构serverless实践
(图片来自网络侵删)

云函数dashboard

点击“函数做事”就可以管理你的云函数了。

函数做事管理自己的云函数

可以设置命名空间来对你的函数做事进行分组管理。

新建“函数做事”

腾讯云目前支持Python、Node.js、PHP、GoLang、JAVA措辞的运行环境,由于云函数的运行模式以是建议采取Python、Node.js、PHP等脚本措辞实现,编译措辞目前的运行性能还不是很高,以是只管即便不要利用JAVA措辞,但是考虑到JAVA措辞的生态,我想serverless未来也会加强对JAVA措辞的支持力度的,以是腾讯云对JAVA的“模板函数”也只供应了一个最大略的HelloWorld,也是本文要详述的缘故原由。

填写好“函数名称”后,选择“运行环境”为“Java8”,再选择“空缺函数模板”。

新建函数做事

配置“函数做事”

在“函数配置”里面设置“实行方法”,java的实行方法必须包括包名称、类名称、方法名称。

个中包名称不支持多级命名,即package的名字不能是xxx.xxx的办法,只能有一级。

JAVA是编译办法运行的,以是不供应云编译环境,只能离线编译,将编译后的jar文件或者zip文件上传到云平台。

函数配置

这些函数做事都可以在今后再次进行编译,干系的代码包也可以随时上传。

开拓JAVA版的“函数”工程构造

函数做事的工程构造

以maven来组织的java项目和以为的项目构造没有什么大的差异,唯一要把稳的是package名称不能为多级。

依赖包

考虑到函数做事要通过API网关暴露出去,就须要引入腾讯供应的scf事宜包,还要利用数据库连接及Mysql数据库就要引入HikariCP,还要利用fastjson来实现JSON的干系功能,还要利用lombok的Bean表明功能。

<dependencies> <!--腾讯网关事宜依赖包--> <dependency> <groupId>com.tencentcloudapi</groupId> <artifactId>scf-java-events</artifactId> <version>0.0.1</version> </dependency> <!--JSON依赖包--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.30</version> </dependency> <!--bean免set/get方法依赖包--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency><!--数据库连接依赖包--> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> </dependencies>package命名规则

没有太明白serverless为什么对java的支持不许可多级package名称,现在只能利用以及package名称,否则配置“函数做事”报错。

package serverless;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.qcloud.scf.runtime.Context;import com.qcloud.services.scf.runtime.events.APIGatewayProxyRequestEvent;import com.qcloud.services.scf.runtime.events.APIGatewayProxyResponseEvent;import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import serverless.pojo.UserInfo;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.;入参、出参

Serverless都因此函数的办法供应做事的,以是函数是“函数做事”的唯一运行单元,对应到JAVA中便是class里边的public型方法,既然是函数就存在输入、输出,也便是入参、出参。

入参包括:JAVA基本类型、POJO工具、JSON工具;

出参包括:JAVA基本类型、JSON String工具;

public Integer saveHandler(UserInfo userInfo){ System.out.println("开始保存用户信息..."); int result=0; try (Connection conn = dataSource.getConnection()) { String sql="insert into UserInfo(userId,mobileNumber,firstName,secondName,password) value (?,?,?,?,?)"; PreparedStatement pstmt= conn.prepareStatement(sql); pstmt.setString(1, UUID.randomUUID().toString()); pstmt.setString(2,userInfo.getMobileNumber()); pstmt.setString(3,userInfo.getFirstName()); pstmt.setString(4,userInfo.getSecondName()); pstmt.setString(5,userInfo.getPassword()); result=pstmt.executeUpdate(); System.out.println("保存用户信息成功!
"); } catch (SQLException e) { e.printStackTrace(); } return result; }

package serverless.pojo;import lombok.Data;@Datapublic class UserInfo { private String userId; private String firstName; private String secondName; private String mobileNumber; private String password;}连接数据库

数据库连接的参数可以通过“函数做事”的环境变量来配置,不用硬编码到程序中。

MySQL数据库连接的参数配置到环境变量中

数据库连接的代码放到布局函数中,这样在函数做事创建的时候就建立好干系的工具。

public Http() { //配置数据库 HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://" + System.getenv("DB_HOST") + ":"+ System.getenv("DB_PORT") + "/" + System.getenv("DB_DATABASE")); config.setUsername(System.getenv("DB_USER")); config.setPassword(System.getenv("DB_PASSWORD")); config.setDriverClassName("com.mysql.jdbc.Driver"); config.setMaximumPoolSize(1); config.addDataSourceProperty("useUnicode",true); config.addDataSourceProperty("characterEncoding","utf8"); dataSource = new HikariDataSource(config); }在线测试

开拓完干系的功能后就可以在线测试了,如果入参是JSON工具,则选择“HelloWord事宜模板”,通过点击该模板名称右边的“眼睛”图标可以对入参进行修正。

JSON格式的入参配置

其他类型的入参可以从模板选择进行配置,也可以自定义模板。
点击“测试”按钮就可以看到当前函数的运行结果了。

在线测试运行结果

通过API网关访问“函数做事”

经由上面几个步骤解释云函数已经开拓支配完成,那么怎么供应给外部利用呢?云函数通过触发办法供应若各种做事支持,本文只先容“API网关触发器”,配置好后就可以和利用普通RESTFul接口的办法来调用云函数了。

添加函数触发器

每个函数可以添加多个触发器

配置好的API网关触发器

“启用集成相应”是哀求函数返回的参数必须符合serverless规范哀求的JSON格式,官站供应的例子有问题,必须将APIGatewayProxyResponseEvent转换为JSON String才能够正常解析。

public String selectHandler(APIGatewayProxyRequestEvent requestEvent, Context context) { System.out.println("开始查询用户信息..."); List<UserInfo> userInfoList=new ArrayList<>(); try (Connection conn = dataSource.getConnection()) { PreparedStatement ps = conn.prepareStatement("SELECT FROM UserInfo"); ResultSet rs = ps.executeQuery(); while (rs.next()) { UserInfo userInfo=new UserInfo(); userInfo.setUserId(rs.getString("userId")); userInfo.setFirstName(rs.getString("firstName")); userInfo.setSecondName(rs.getString("secondName")); userInfo.setMobileNumber(rs.getString("mobileNumber")); userInfo.setPassword(rs.getString("password")); userInfoList.add(userInfo); } System.out.println("查询用户信息结束!
"); } catch (SQLException e) { e.printStackTrace(); } //配置返回给API网关的格式化数据 APIGatewayProxyResponseEvent apiGatewayProxyResponseEvent = new APIGatewayProxyResponseEvent(); apiGatewayProxyResponseEvent.setIsBase64Encoded(false); apiGatewayProxyResponseEvent.setStatusCode(200); Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json"); headers.put("Access-Control-Allow-Origin", ""); apiGatewayProxyResponseEvent.setHeaders(headers); apiGatewayProxyResponseEvent.setBody(JSONArray.toJSONString(userInfoList)); return JSONObject.toJSONString(apiGatewayProxyResponseEvent); }

相关文章

介绍京东商城,电商巨头的崛起与变革之路

随着互联网的快速发展,电子商务已经成为人们生活中不可或缺的一部分。在众多电商平台中,京东商城凭借其独特的商业模式和卓越的服务质量,...

网站推广 2025-01-02 阅读0 评论0

保护膜更换全攻略,让你的爱机焕然一新

随着智能手机的普及,保护膜成为了我们日常生活中不可或缺的配件。它不仅能保护手机屏幕免受划痕和磨损,还能增加手机的美观度。随着时间的...

网站推广 2025-01-02 阅读0 评论0

信任之基,如何构建稳固的人际关系

信任,是人类社会中最宝贵的财富之一。它不仅关乎人际关系的和谐,更关乎社会的稳定与发展。在现实生活中,信任的建立并非易事。本文将从信...

网站推广 2025-01-02 阅读0 评论0

介绍二级跳方法,如何实现跳跃的完美飞跃

二级跳,作为田径运动中的一项重要技能,不仅考验运动员的速度、力量和协调性,还要求运动员具备出色的跳跃技巧。本文将深入剖析二级跳的技...

网站推广 2025-01-02 阅读0 评论0

介绍乐视看台,科技与娱乐的完美融合

随着互联网技术的飞速发展,我国文化产业呈现出蓬勃发展的态势。乐视看台作为一家集科技、娱乐、影视、体育等多种元素于一体的综合性平台,...

网站推广 2025-01-02 阅读0 评论0

介绍乐视上市之路,创新与变革的华丽篇章

近年来,我国资本市场风云变幻,众多企业纷纷踏上上市之路。在这其中,乐视网(以下简称“乐视”)的上市之路备受关注。从一家初创公司到成...

网站推广 2025-01-02 阅读0 评论0