使用 Fn Project 搭建无服务平台

目录

下载

脚本直接下载

下载可执行文件

上传

启动 Fn 服务

初始化 Fn 工程

创建 app

部署 function

调用 function

JSON 入参

官方文档


下载

有两种下载方式

脚本直接下载

直接在服务器执行该命令即可

curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh

下载可执行文件

本文演示的是直接下载可执行文件的方式,可以自定义安装路径

下载地址:

Release 0.6.31 · fnproject/cli · GitHubicon-default.png?t=N7T8https://github.com/fnproject/cli/releases/tag/0.6.31

上传

将下载好的 fn_linux 上传到服务器上

这里上传的目录为 /usr/local/my/fnproject

mkdir fnproject

cd /fnproject

#重命名
mv fn_linux fn

#创建软链接,以便在任意路径下执行 fn 命令
ln -s /usr/local/my/fnproject/fn /usr/local/bin/fn

#添加执行权限
chmod 777 ./fn

启动 Fn 服务

启动 fn 服务前必须确保 docker 也启动了,没 docker 需要先下载 docker

# 没下载需先下载 docker
yum install -y docker-ce

# 启动docker
systemctl start docker

# 开机自启动 docker
systemctl enable docker

第一次启动,会去下载基础镜像,默认端口是8080

fn start

启动后,访问服务器 8080 端口

 

初始化 Fn 工程

使用 init 命令创建一个工程模板

fn init --runtime java hello

func.yaml 文件内容如下

其中 cmd 的配置就是最终要执行的方法

 schema_version: 20180708
name: hello
version: 0.0.1
runtime: java
build_image: fnproject/fn-java-fdk-build:jdk17-1.0.186
run_image: fnproject/fn-java-fdk:jre17-1.0.186
cmd: com.example.fn.HelloFunction::handleRequest

创建 app

先创建 app,然后再将刚刚用 init 创建出来的 function(模板工程中的方法) 部署在新建的 app 上

fn create --app myapp

fn list apps

部署 function

# fn deploy <APP_NAME> <FUNCTION_NAME>
fn deploy myapp hello --local

# fn inspect function <APP_NAME> <FUNCTION_NAME>
fn inspect function myapp hello

 部署后会给 function 自动生成一个调用地址,可以通过 inspect 命令来查看该地址

调用 function

可以通过命令行调用

#fn invoke <APP_NAME> <FUNTION_NAME>
fn invoke myapp hello

也可以直接通过接口来调用

curl -X "POST" http://localhost:8080/invoke/01HV1XRSY8NG8G00GZJ0000002

JSON 入参

以上只是直接使用 init 创建的模板工程简单部署个云函数,实际使用中,一般都需要出入参,而出入参则是通过 json 的格式来传递的。

对模板工程做简单的修改即可,将以下两个文件分别修改入参和出参类型

 vim src/main/java/com/example/fn/HelloFunction.java 

 vim src/test/java/com/example/fn/HelloFunctionTest.java

HelloFunction

package com.example.fn;

public class HelloFunction {

    public static class Input {
        public String name;
    }

    public static class Result {
        public String salutation;
    }

    public Result handleRequest(Input input) {
        Result result = new Result();
        result.salutation = "Hello " + input.name;
        return result;
    }

}          

HelloFunctionTest

package com.example.fn;

import com.fnproject.fn.testing.*;
import org.junit.*;

import static org.junit.Assert.*;

public class HelloFunctionTest {

    @Rule
    public final FnTestingRule testing = FnTestingRule.createDefault();

    @Test
    public void shouldReturnGreeting(){
        testing.givenEvent().withBody("{\"name\":\"Bob\"}").enqueue();
        testing.thenRun(HelloFunction.class,"handleRequest");

        FnResult result = testing.getOnlyResult();
        assertEquals("{\"salutation\":\"Hello Bob\"}", result.getBodyAsString());
    }
}

 重新部署

fn deploy --app myapp hello

curl 调用验证

curl -X "POST" -H "Content-Type: application/json" -d '{"name":"Bob"}' http://localhost:8080/invoke/01HV1XRSY8NG8G00GZJ0000002

官方文档

Introduction to Fn with Java (fnproject.io)icon-default.png?t=N7T8https://fnproject.io/tutorials/JavaFDKIntroduction/#AcceptingJSONInput

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10、【代理模式】通过引入一个代理对象来控制对原始对象的访问的方式。

你好&#xff0c;我是程序员雪球。 今天我们了解代理模式的原理、静态代理和动态代理的区别、Spring AOP 和动态代理的关系、代理模式的使用场景&#xff0c;以及用 Java 实现一个动态代理示例 一、代理模式的原理 代理模式是一种设计模式&#xff0c;它提供了一种通过引入一个…

【十一】MyBatis Plus 原理分析

MyBatis Plus 原理分析 摘要 Java EE开发中必不可少ORM框架&#xff0c;目前行业里最流行的orm框架非Mybatis莫属了&#xff0c;而Mybatis框架本身没有提供api实现&#xff0c;所以市面上推出了Mybatis plus系列框架&#xff0c;plus版是mybatis增强工具&#xff0c;用于简化My…

量子飞跃:从根本上改变复杂问题的解决方式

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨王珩 编译/排版丨沛贤 深度好文&#xff1a;1000字丨5分钟阅读 利用多功能量子比特的量子计算机已处于解决复杂优化问题的最前沿&#xff0c;例如旅行商问题&#xff0c;这是一个典型的…

虚良SEOPython脚本寄生虫程序源码

本程序&#xff0c;快速收录百度首页&#xff0c;3-5天就可以有流量&#xff0c;长期稳定&#xff0c;可以设置自动推送。 点这里 Python脚本寄生虫程序源码&#xff08;寄生虫电影脚本&#xff09; - 虚良SEO 模板可以自己修改&#xff0c;源码带模板标签说明&#xff0c;简…

AI大模型日报#0415:贾佳亚团队新作王炸、马斯克首款多模态大模型、ChatGPT to B

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 融合ChatGPTDALLE3&#xff0c;贾佳亚团队新作开源&#xff1a;识图推理生图一站解决 摘要: 贾佳亚团队推出了多模态模型Mini-Gem…

day58 回文子串 最长回文子序列

题目1&#xff1a;647 回文子串 题目链接&#xff1a;647 回文子串 题意 统计字符串s中回文子串的数目 回文子串是正着读和倒过来读一样的字符串 子串是连续字符组成的一个序列 动态规划 动规五部曲 1&#xff09;dp数组及下标i的含义 dp[i][j] 表示 [s[i]&#xf…

转移插槽简介

4.3.4.转移插槽 我们要将num存储到7004节点&#xff0c;因此需要先看看num的插槽是多少&#xff1a; 如上图所示&#xff0c;num的插槽为2765. 我们可以将0~3000的插槽从7001转移到7004&#xff0c;命令格式如下&#xff1a; 具体命令如下&#xff1a; 建立连接&#xff1a;…

【读书笔记】自动驾驶与机器人中的SLAM技术——高翔

文章会对本书第五章节及以后章节进行总结概括。每日更新一部分。一起读书吧。 第五章——基础点云处理 重点&#xff1a;点云的相邻关系是许多算法的基础 5.1 激光雷达传感器与点云的数学模型 5.1.1激光雷达传感器的数学模型 雷达有两种&#xff1a;机械旋转式激光雷达&…

RocketMQ集群配置

我们集群部署采取采用2m-2s&#xff08;同步双写&#xff09;方式&#xff0c;每个Master配置一个Slave&#xff0c;有多对Master-Slave&#xff0c;HA采用同步双写方式&#xff0c;即只有主备都写成功&#xff0c;才向应用返回成功. 1、服务器环境 序号IP角色架构模式1192.16…

一文详解MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM及其关系

经常遇到很多系统&#xff0c;比如&#xff1a;MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM&#xff0c;这些都是什么系统&#xff1f;有什么功能和作用&#xff1f;它们之间的关系是怎样的&#xff1f; 今天就一文详细分享给大家。 10大系统之间的关系 ERP 和其他…

深度学习之PyTorch实现卷积神经网络(CNN)

在深度学习领域&#xff0c;卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;是一种非常强大的模型&#xff0c;专门用于处理图像数据。CNN通过卷积操作和池化操作来提取图像中的特征&#xff0c;具有较好的特征学习能力&#xff0c;特别适用…

机器学习算法快速入门

文章目录 0.简介1.常用术语1) 模型2) 数据集3) 样本&特征4) 向量5) 矩阵6)假设函数&损失函数7&#xff09;拟合&过拟合&欠拟合 2.线性回归3.梯度下降求极值4.Logistic回归算法&#xff08;分类问题&#xff09;5.KNN最邻近分类算法6.朴素贝叶斯分类算法7.决策树…

Python调用微信OCR识别文字和坐标

原理 在看雪看到一篇文章&#xff1a;逆向调用QQ截图NT与WeChatOCR-软件逆向。里面说了怎么调用微信和QQ本地的OCR模型&#xff0c;还有很详细的分析过程。 我稍微看了下文章&#xff0c;多的也看不懂。大概流程是使用mmmojo.dll这个dll来与WeChatOCR.exe做通信的&#xff0c…

1688拍立淘接口:图像识别技术引领电商搜索新革命,打造智能购物新体验!

1688拍立淘接口&#xff1a;技术解析与应用实践 一、引言 在电子商务蓬勃发展的今天&#xff0c;图像识别技术正逐渐成为各大电商平台提升用户体验、优化搜索效率的关键技术之一。作为阿里巴巴旗下的B2B采购批发平台&#xff0c;1688也紧跟技术潮流&#xff0c;推出了拍立淘接…

Dos命令的基础

雷迪斯and the乡亲们 欢迎你们来到 奇幻的编程世界 一、DOS命令基础 提示符 根目录&#xff1a;进入大到分区后&#xff0c;最外层的目录就是跟目录 工作目录&#xff1a;当前的所在位置/所在文件夹 二、cd命令 切换工作目录&#xff1a; cd 格式&#xff1a; cd 目标 …

巧避海森堡不确定性原理!量子比特读出技术重磅突破

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1200字丨7分钟阅读 摘要&#xff1a;阿尔托大学研究人员用微测辐射热计替代传统参数放大器&#xff0c;以更少的附加噪声实现非侵入式量子比特测量…

排序链表 - LeetCode 热题 33

大家好&#xff01;我是曾续缘&#x1f639; 今天是《LeetCode 热题 100》系列 发车第 33 天 链表第 12 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 排序链表 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a…

带你追踪 ICASSP 2024会议现场 韩国夜景令人陶醉

会议之眼 快讯 昨天&#xff0c;2024年的ICASSP&#xff08;International Conference on Acoustics, Speech, and Signal Processing&#xff09;即国际声学、语音和信号处理会议已经在韩国首尔拉开帷幕&#xff01;吸引了众多热情的与会者&#xff01;本届ICASSP会议举办日期…

实验笔记之——RGBD GS-ICP SLAM配置与测试

《RGBD GS-ICP SLAM》是最新开源的一个3DGS-SLAM工作&#xff0c;通过利用GICP来实现当前帧gaussian与已mapping的gaussian进行匹配进行位姿的估算&#xff0c;并通过关键帧的选择策略来进一步提升performance~ Use G-ICP to align the current frame with the 3D GS map whic…

Redis消息队列-基于PubSub的消息队列

7.3 Redis消息队列-基于PubSub的消息队列 PubSub&#xff08;发布订阅&#xff09;是Redis2.0版本引入的消息传递模型。顾名思义&#xff0c;消费者可以订阅一个或多个channel&#xff0c;生产者向对应channel发送消息后&#xff0c;所有订阅者都能收到相关消息。 SUBSCRIBE …