问题标签 [spring-cloud-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1013 浏览

spring-boot - Spring Cloud Function 需要 Flux在 Azure Functions 上部署时,而不是 String

我目前正在研究 Spring Cloud Function 及其在不同云环境(AWS Lambda 和 Azure Functions)上部署一个函数的可能性。

我的函数看起来像这样(当然非常简化):

在 AWS Lambda 上部署它时,它可以完美运行(可以在此处找到完整的项目)。

但是,如果我使用 Azure Functions Core Tools 运行与本地 Azure Functions 部署相同的函数,则在调用该函数时会出现以下异常:

出于某种原因,该函数似乎期望使用 Flux 而不是 String。我认为这可能与[文档]有关(https://cloud.spring.io/spring-cloud-static/spring-cloud-function/2.0.0.RELEASE/single/spring-cloud-function.html #_function_catalog_and_flexible_function_signatures)这样说:

Spring Cloud Function 的主要特性之一是为用户定义的函数适配和支持一系列类型签名,同时提供一致的执行模型。这就是为什么所有用户定义的函数都被 FunctionCatalog 转换为规范表示,使用 Project Reactor 定义的原语(即 Flux 和 Mono)。例如,用户可以提供一个 Function 类型的 bean,FunctionCatalog 会将它包装成一个 Function,Flux>。

所以问题可能与此有关:

如果我按以下方式更改功能,它会起作用:

我的函数处理程序如下所示:

对于 AWS 部署,我有以下依赖项:

对于 Azure 部署,我只有一个依赖项:

我已经查看了这两个适配器的源代码: 在 AWS 上,SpringBootRequestHandler调用目标函数(在第 48 行)。

在 Azure 上,AzureSpringBootRequestHandler调用目标函数(在第 56 行)。

对我来说,看起来在这两种情况下,都交出了 Flux。但是,对于 AWS 适配器,对象显然是在两者之间的某个位置展开的。但 Azure 适配器并非如此。

任何想法为什么?

0 投票
1 回答
872 浏览

java - Spring Cloud Function:如何将供应商映射到 Azure 函数

我正在尝试使用 Spring Cloud Function 2.0 将供应商 Bean 映射到 Azure 函数,但我需要扩展 AzureSpringBootRequestHandler,它似乎只支持具有输入参数和返回值的函数。AzureSpringBootRequestHandler 类有两个类型参数:输入和输出,AzureSpringBootRequestHandler.handleRequest() 也需要输入参数。

上面的代码在 reactor.core.publisher.FluxJust.(FluxJust.java:60) 导致 NPE

在 AzureSpringFunctionInitializer.lookup 将 @Bean 返回类型更改为Function<Void, List<String>>导致 IllegalStateException“没有使用 name=foo 定义的函数”

添加一个虚拟 int 参数有效。

PS 理想情况下,我什至不需要返回值,所以我会代替供应商将其设为 Runnable,但这似乎完全不受支持。

任何帮助,将不胜感激。

0 投票
0 回答
431 浏览

java - Spring Cloud Function 部署为 Azure 功能:日志记录?

我正在尝试使用 Spring Cloud Function 2.0 将函数 Bean 映射到 Azure 函数。日志记录应该如何完成?

我需要使用 Azure 上下文记录器还是像 slf4j 这样的通用记录器?

似乎无法在函数 Bean 中获取 Azure 上下文记录器。

但是,当使用 slf4j 时,日志似乎只能在本地工作,但是当部署到 Azure 并从 Azure 门户运行时 - 日志不会出现在 Azure 控制台中。

0 投票
0 回答
391 浏览

java - 带有 Kinesis 的 Spring Cloud 功能

我正在尝试通过带有 Spring Cloud Function 的 AWS Lambda 收听来自 AWS Kinesis Streams 的数据。我无法将来自 Kinesis 的输入映射到我的处理程序。

MyHandler.java

映射器功能

Payload是我自己的 POJO。

任何帮助都会很有用。

0 投票
0 回答
207 浏览

spring-cloud-function - 请求没有正文时Spring Cloud Function输入类型丢失

我使用具有可选请求主体的 Spring Cloud Function 编写了一个函数。当正文有内容时一切正常,但如果没有内容,则函数的输入变为LinkedMultiValueMap并且响应对象被包装在一个数组中。

我已经创建了一个最小的函数和测试来说明这个问题,但是,虽然我可以想象为什么输入类型LinkedMultiValueMap在没有提供内容的情况下会变成这样,但感觉就像一个错误。这是一个错误还是我只是做错了什么?

另外,当没有请求正文时,将响应包装在数组中的可能原因是什么?

这是我的最小功能

这是我的测试

这是我在请求正文中不提供内容时得到的堆栈跟踪

0 投票
0 回答
455 浏览

java - 为 SpringCloudFunction 扩展 SpringBootStreamHandler

我正在一个使用 Spring Cloud Function for AWS Lambda 的项目中工作。我注意到很少有关于扩展 SpringBootRequestHandler 以处理特定类型的输入和输出的示例。

但是,我的项目要求输入 json 对象是随机的。因此,我无法定义 Java 类,这是 SpringBootRequestHandler 实现所必需的。

目前,我扩展 SpringBootStreamHandler 的处理程序类如下所示:

但是,有没有一种方法可以将业务逻辑抽象到另一个类扩展 Function 类似于 SpringBootRequestHandler 实现?

0 投票
1 回答
825 浏览

java - 如何使用 Spring Cloud Function 公开多个函数端点?

我有一个基本的Spring Cloud Function应用程序,其中包含两个声明的函数“小写”和“大写”。如果我将应用程序创建为普通的@SpringBootApplication并将两个函数都注释为@Beans(功能 bean),那么一切正常。这两个函数都通过单独的 HTTP 端点公开,我可以通过以下方式调用函数:

  • curl localhost:8080/大写 -H "Content-Type: text/plain" -d '我的输入文本'
  • curl localhost:8080/lowercase -H "Content-Type: text/plain" -d '我的输入文本'

现在我将应用程序的主类转换为“功能形式”以改善应用程序启动时间(如官方文档中的建议:http: //cloud.spring.io/spring-cloud-function/multi/multi__functional_bean_definitions.html):

问题:

现在只有一个端点直接暴露在根路径上:

curl localhost:8080/ -H "Content-Type: text/plain" -d '我的输入文本'

它在内部调用“大写”函数,而不考虑初始化函数中 bean 的注册顺序。

问题:

有没有办法通过它们的专用端点再次调用这两个函数: localhost:8080/uppercaselocalhost:8080/lowercase

0 投票
1 回答
1912 浏览

spring - 部署在 AWS Lambda 上的 Spring Cloud 函数在 FunctionalSpringApplication.java:102 处出现 NullPointerException 失败

我有一个非常简单的带有 AWS 适配器的 Spring Cloud Functions,可以将它作为 AWS Lambda 运行。源代码在 Github 上可用:https ://github.com/codependent/spring-boot-authentication-function

当我在 AWS Lambda 上运行此函数时,它会引发 NullPointerException。知道有什么问题吗?

我已org.springframework.cloud.function.adapter.aws.SpringBootStreamHandler在 AWS 控制台中设置为处理程序类的值。

完整的 CloudWatch 日志:

0 投票
0 回答
79 浏览

azure - Azure 存储触发器

我正在查看文档,@BlobTrigger并看到内容在示例中作为字节数组传入。可以FileStorageResource提供弹簧吗?我在网上找不到任何东西表明这是否可能

0 投票
1 回答
904 浏览

spring-webflux - 有没有spring cloud功能webflux+spring cloud stream与http源码的集成

我正在尝试将 Spring Cloud Stream 与 Spring Cloud 功能 webflux 集成

因为他们在未来的版本中弃用 Spring Cloud 反应流,所以我正在尝试使用 Spring Cloud 功能 https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.2.RELEASE/single/spring -cloud-stream.html#spring-cloud-stream-preface-notable-deprecations

Spring Cloud Web 函数可以使用文档中的路径公开其函数的端点

https://cloud.spring.io/spring-cloud-static/spring-cloud-function/1.0.0.RELEASE/single/spring-cloud-function.html

从云流中我可以看到源需要定义为供应商https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.2.RELEASE/single/spring-cloud-stream。 html#_spring_cloud_function

但我的用例是从响应式 http 端点获取 POST 数据并摄取到 kafka,有没有办法从 spring cloud function web 和 spring cloud stream 实现它?

来自带有弹簧云流的弹簧云功能的文档

如果我运行这个,我可以看到日期每 1 秒插入一次 kafka,如果我调用 localhost:/8080/date 之类的供应商的 get 端点会导致日期响应,有没有办法从 post 注入 paylaod 到带有弹簧云功能的kafka?