Cloud Function 简介
https://github.com/spring-cloud/spring-cloud-function
简介
就像Spring一直在推广基于普通java对象(POJO)的编程模型一样,Spring Cloud Function也基于普通的函数来推广编程模型。我们指的是java.util.function包中定义的核心接口:Function,Consumer和Supplier。
Spring Cloud Function是一个具有以下高级目标的项目:
通过功能促进业务逻辑的实现。
将业务逻辑的开发生命周期与任何特定的运行时目标分离,以便相同的代码可以作为Web端点,流处理器或任务运行。
支持无服务器提供商之间的统一编程模型,以及独立运行(本地或PaaS)的能力。
在无服务器提供商上启用Spring Boot功能(自动配置,依赖注入,指标)。
Spring Cloud功能特性:
函数-Function,消费者-Consumer和供应商-Supplier类型的@Beans的包装器,使用RabbitMQ,Kafka等将它们作为HTTP端点和/或消息流监听器/发布者公开给外部世界。
将作为Java函数体的字符串编译为字节码,然后将它们转换为可以如上所述进行包装的@Beans。
使用隔离的类加载器部署包含此类应用程序上下文的JAR文件,以便您可以将它们打包在一个JVM中。
AWS Lambda,Microsoft Azure,Apache OpenWhisk以及可能的其他“无服务器”服务提供商的适配器。
这是一个完整的,可执行的,可测试的Spring Boot应用程序(实现简单的字符串操作):
1 |
|
Java
这些类型的实现可以通过@FunctionScan启用的类路径扫描显式或隐式地注册为Bean。参数和(或)返回类型可以选择使用Reactor的Flux,它是Reactive Streams的Publisher。这样可以实现与其他Reactive Streams组件的互操作性,甚至是基于其他实现的组件,例如RxJava 2,并且它为此处理模型带来了非阻塞IO和反压等反应性功能(有关更多信息,请参阅Project Reactor)。只要参数和(或)返回类型不是Flux,Spring Cloud Function就会将它们包装起来,以便函数可以通过Flux进行互操作。对于简单的一次性处理用例,您可以保持简单:
实际上,Spring Cloud Function支持动态地将基于String的lambdas编译为函数实例。这在原型设计或添加一些简单的转换逻辑时尤其有用,因为今天常用的是Spring表达式语言。
您可能会问为什么Spring需要推广此模型,因为您无论如何都可以轻松创建Function,Consumer和Supplier实例。要知道答案涉及控制反转,这应该不足为奇。多年来,好莱坞原则已经描述了从基本依赖注入到Spring无处不在地使用模板模式的所有内容:“不要打电话给我们,我们会打电话给你”。上面提到的Flux-adapting实际上是控制反转的一个例子,但更重要的一个是业务逻辑与部署配置文件的分离。在这种情况下,业务逻辑指的是函数,而部署配置文件可以是REST应用程序,流处理应用程序或有限任务。Spring Cloud Function为每种类型提供JAR,并且在每种情况下,自动配置的FunctionCatalog用于在ApplicationContext中定位Functions,Consumers和Suppliers。
流处理
实际上,Spring Cloud Function支持动态地将基于String的lambdas编译为函数实例。这在原型设计或添加一些简单的转换逻辑时尤其有用,因为今天常用的是Spring表达式语言。
您可能会问为什么Spring需要推广此模型,因为您无论如何都可以轻松创建Function,Consumer和Supplier实例。要知道答案涉及控制反转,这应该不足为奇。多年来,好莱坞原则已经描述了从基本依赖注入到Spring无处不在地使用模板模式的所有内容:“不要打电话给我们,我们会打电话给你”。上面提到的Flux-adapting实际上是控制反转的一个例子,但更重要的一个是业务逻辑与部署配置文件的分离。在这种情况下,业务逻辑指的是函数,而部署配置文件可以是REST应用程序,流处理应用程序或有限任务。Spring Cloud Function为每种类型提供JAR,并且在每种情况下,自动配置的FunctionCatalog用于在ApplicationContext中定位Functions,Consumers和Suppliers。
AWS Lambda
如果我们想通过HTTP请求再次公开字符串反向器,则Spring Cloud Function AWS附带了 SpringBootRequestHandler。它实现了AWS的 RequestHandler 并负责将AWS请求分派给我们的功能。
1 | public class MyStringHandlers extends SpringBootRequestHandler<String, String> { |
事实证明,即使我们的应用程序中有多个Spring Cloud Function,AWS也只能调用其中之一。
总结
总之,尽管处于早期阶段,Spring Cloud Function是一个强大的工具,可用于将业务逻辑与任何特定的运行时目标分离。
有了它,相同的代码可以作为Web端点,在云平台上或作为流的一部分运行。它抽象出了所有传输详细信息和基础架构,使开发人员可以保留所有熟悉的工具和流程,并专注于业务逻辑。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wshten@gmail.com
文章标题:Cloud Function 简介
本文作者:KevinTen
发布时间:2019-09-30, 00:00:00
最后更新:2019-09-30, 10:08:22
原始链接:http://github.com/kevinten10/2019/09/30/Cloud/serverless/Cloud-Function/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。