Spring Cloud Function快速入门Demo

1.什么是Spring Cloud Function?

Spring Cloud Function是一个具有以下高级目标的项目:

  • 通过功能促进业务逻辑的实现。
  • 将业务逻辑的开发生命周期与任何特定的运行时目标脱钩,以便可以将相同的代码作为Web终结点,流处理器或任务来运行。
  • 支持跨无服务器提供程序的统一编程模型,以及独立运行(本地或在PaaS中)的能力。
  • 在无服务器提供程序上启用Spring Boot功能(自动配置,依赖项注入,指标)。

它抽象出所有传输细节和基础结构,使开发人员可以保留所有熟悉的工具和流程,并专注于业务逻辑。

特征

Spring Cloud Function功能:

  • 编程风格的选择-反应式,命令式或混合式。
  • POJO函数(即,如果符合@FunctionalInterface语义的内容,我们将其视为函数)
  • 输入和输出的透明类型转换。
  • 函数组成,包括将命令性函数与反应性组成。
  • REST支持将功能公开为HTTP端点等。
  • 通过Spring Cloud Stream框架向函数传递数据(通过Apache Kafka,Solace,RabbitMQ等)。
  • 使用隔离的类加载器部署打包为JAR文件的功能,以在单个JVM中支持多版本部署。
  • 特定于目标平台的部署打包功能(例如,Project Riff,AWS Lambda等)
  • 适用于AWS Lambda,Microsoft Azure,Apache OpenWhisk以及其他“无服务器”服务提供商的适配器。
  • 支持具有多个输入和输出的反应式功能,从而允许功能处理合并,联接和其他复杂的流操作。

2.代码工程

实验目标

创建一个 Spring Cloud Function 项目,编写和部署自定义函数,并通过 REST API 管理这些函数

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-demo</artifactId><groupId>com.et</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Spring-Cloud-Function</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Cloud Function Web --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-function-web</artifactId></dependency><!-- Spring Cloud Function Context --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-function-context</artifactId></dependency></dependencies>
</project>

controller

FunctionCatalog:
  • FunctionCatalog 是 Spring Cloud Function 提供的一个组件,用于在应用程序上下文中查找和调用函数。
  • 它允许你通过函数名称动态地获取和调用函数
package com.et.controller;import org.springframework.cloud.function.context.FunctionCatalog;
import org.springframework.web.bind.annotation.*;import java.util.function.Function;@RestController
public class FunctionController {private final FunctionCatalog functionCatalog;public FunctionController(FunctionCatalog functionCatalog) {this.functionCatalog = functionCatalog;}@GetMapping("/function/{name}")public String applyFunction(@PathVariable String name, @RequestParam String input) {Function<String, String> function = functionCatalog.lookup(Function.class, name);if (function != null) {return function.apply(input);} else {return "Function not found";}}
}

function

定义了一个 Spring 组件 CustomFunctions,其中包含两个函数:toUpperCase 和 toLowerCase。这些函数被注册为 Spring 的 Bean,可以在应用程序中被其他组件使用,特别是在使用 Spring Cloud Function 时,可以通过 FunctionCatalog 动态查找和调用这些函数。

package com.et.function;import java.util.function.Function;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
public class CustomFunctions {@Beanpublic Function<String, String> toUpperCase() {return value -> value.toUpperCase();}@Beanpublic Function<String, String> toLowerCase() {return value -> value.toLowerCase();}
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/springcloud-demo: Spring Cloud tutorial about hystrix,eureka,config,admin,skywalking(spring cloud function)

3.测试

  • 启动Spring Cloud 应用
  • 访问 http://localhost:8080/function/toUpperCase?input=hello 将返回 HELLO
  • 访问 http://localhost:8080/function/toLowerCase?input=HELLO 将返回 hello

4.总结

这个示例展示了如何创建一个 Spring Cloud Function 项目,编写和部署自定义函数,并通过 REST API 管理这些函数。你可以根据需要扩展这个示例,添加更多的函数或集成到不同的云平台上。包括像 Amazon AWS Lambda 这样的 FaaS(函数即服务,function as a service)平台。

5.引用

  • Spring Cloud Function
  • http://www.liuhaihua.cn/archives/711614.html

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

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

相关文章

第3章 继承与多态

Java面向对象程序设计-T3(继承与多态) 一、封装 1、概述 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 public class Student {//1、私有化属性private String name;private int age;//2、提供公共方法供外部访问//传入数据public void setName(String nam…

荣誉证书PSD素材(59套免费)

本作品提供荣誉证书PSD素材下载&#xff0c;格式为PSD&#xff1b; 请使用软件Photoshop进行编辑&#xff0c;作品中文字及图均可以通过软件修改和编辑&#xff1b; 点击下载: 荣誉证书PSD素材

Java三大特性之多态

多态是Java的三大特性之一&#xff0c;它指的是同一个方法名字&#xff0c;在不同的对象中有不同的实现方式。具体来说&#xff0c;多态有两种表现形式&#xff1a;静态多态&#xff08;编译时多态&#xff0c;也称为重载&#xff09;和动态多态&#xff08;运行时多态&#xf…

第T6周:Tensorflow实现好莱坞明星识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: &#xff08;二&#xff09;具体步骤 1.查询…

Spring6框架搭建(自用)

一、什么是Spring 众所不周知&#xff0c;Spring就是爪哇人的春天&#xff0c;但是在框架程序设计之前都绕不开javaWeb 1.javaWeb框架发展史 1、ServletJSPJavaBean(跳转页面、业务逻辑判断、数据库查询) 2、MVC三层架构(M Model pojo(User)V-view(USP)C-(controller-servl…

linux-UART

参考博客 https://blog.csdn.net/m0_38106923/article/details/126024970?sharetypeblog&shareId126024970&sharereferAPP&sharesourceweixin_40933496&sharefromlink 1.串口 UART的全称是Universal Asynchronous Receiver and Transmitter&#xff0c;即异步…

大数据治理:策略、技术与挑战

随着信息技术的飞速发展&#xff0c;大数据已经成为现代企业运营和决策的重要基础。然而&#xff0c;大数据的复杂性、多样性和规模性给数据管理带来了前所未有的挑战。因此&#xff0c;大数据治理应运而生&#xff0c;成为确保数据质量、合规性、安全性和可用性的关键手段。本…

vue插件清除 所有console.log()

一、作用 1、提升性能console.log() 语句会消耗一定的性能&#xff0c;尤其是在频繁调用的情况下。在生产环境中移除这些语句可以提高应用的运行效率。 2、减少信息泄露console.log() 可以输出敏感信息&#xff08;如用户数据、API 响应等&#xff09;。在生产环境中&#xf…

DAY15|二叉树Part03|LeetCode: 513.找树左下角的值、112. 路径总和、106. 从中序与后序遍历序列构造二叉树

LeetCode: 513.找树左下角的值 力扣代码链接 文字讲解&#xff1a;LeetCode: 513.找树左下角的值 视频讲解&#xff1a;怎么找二叉树的左下角&#xff1f; 递归中又带回溯了&#xff0c;怎么办&#xff1f; 基本思路 对题目进行一下分析&#xff0c;要找二叉树最底层最左边节点…

【记录】Excel 公式|(一)根据某列内容和关键词列,自动生成当前行的关键词分类名称

文章目录 引言公式解析应用场景数据准备公式应用结果分析 结论扩展应用注意事项总结后续学习结语 我的 Excel 版本&#xff1a;2021 引言 在当今数据驱动的世界中&#xff0c;高效的数据处理和分类对于企业和个人来说至关重要。Excel 作为最常用的数据处理工具之一&#xff0c…

【ROS2】hbm_img_msgs/msg/HbmMsg1080P 转 opencv cv::Mat

1、简述 在ROS2中处理图像时,经常会用的OpenCV,因此常常会涉及到ROS2话题和cv::Mat的转换 ROS2内置消息 sensor_msgs::msg::Image 可以使用 cv_bridge 转换成 OpenCV的 cv::Mat。 参见博客:【ROS2】cv_bridge:ROS图像消息和OpenCV的cv::Mat格式转换库 在使用地平线X3派时…

ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力

新版本发布 ClkLog在上线近1年后&#xff0c;获得了客户的一致肯定与好评&#xff0c;并收到了不少客户对功能需求的反馈。根据客户的反馈&#xff0c;我们在今年三季度对ClkLog的版本进行了重新的规划与调整&#xff0c;简化了原有的版本类型&#xff0c;方便客户进行选择。 与…

C++:set和map的使用

目录 序列式容器和关联式容器 set set类的介绍 构造和迭代器 增删查 insert find和erase erase迭代器失效 lower_bound与upper_bound multiset和set的区别 map map类的介绍 pair类型介绍 构造和迭代器 增删查 map数据修改&#xff1a;重载operator[] multimap…

Unix和Linux系统中的文件权限

详细解释Unix和Linux系统中的文件权限设置以及如何使用chmod命令来修改这些权限。 文件权限的详细解释 在Unix和Linux系统中&#xff0c;文件权限是控制谁可以访问和操作文件或目录的重要机制。权限分为三类&#xff1a;所有者&#xff08;owner&#xff09;、所属组&#xf…

el-tree展开子节点后宽度没有撑开,溢出内容隐藏了,不显示横向滚动条

html结构如下 <div class"tree-div"><el-tree><template #default"{ node, data }"><div class"node-item">...</div></template></el-tree></div> css代码(scss) .tree-div {width: 300px;…

android定时器循环实现轮播图

说明&#xff1a; android定时器加for循环实现轮播图 效果&#xff1a; step1: package com.example.iosdialogdemo;import android.os.Bundle; import android.os.Handler; import android.widget.ImageView; import android.widget.TextView;import androidx.appcompat.ap…

ChatGPT能预测时间序列?基于大模型的时间序列预测中的迭代事件推理_chatgpt能预测时间序列

引言 时间序列预测&#xff08;Time Series Forecasting&#xff09;是支撑经济、基础设施和社会各领域决策的关键技术。然而&#xff0c;传统的预测方法在面对由外部随机事件引起的突发性变化或异常时&#xff0c;往往表现出局限性。这些方法通常依赖于历史数据的模式识别&am…

计算机网络-传输层提供的服务

传输层在协议栈中的位置 我们可以给应用层的这些应用程序提供我们想要传输的数据&#xff0c;比如说我们想用微信传一张图片&#xff0c;或者想用QQ发一串字符。那这些数据是由我们用户直接提供的&#xff0c;那么我们的数据交给了应用层的某一个进程之后。这个进程可能会在我们…

将Notepad++添加到右键菜单【一招实现】

一键添加注册表 复制以下代码保存为 Notepad.reg&#xff0c;将红框内路径修改为自己电脑的“Notepad.exe路径”后&#xff0c;再双击运行即可。 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\NotePad] "Notepad" "Icon""D:\\N…

vue3二次封装UI组件

直接上代码 <template><el-uploadclass"lth_upload":action"${baseUrl}/file/upload":headers"uploadHeader"v-bind"$attr"><template v-for"(_, key) in $slots" #[key]"valueData"><slot…