- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我做了什么:
我正在创建一个示例计划 lambda,它需要从 SQS 队列中取出消息。我使用无服务器框架和 Kotlin 创建了它,配置如下:
service: example
provider:
name: aws
runtime: java8
region: eu-west-1
memorySize: 128
environment:
sqs_url:
Ref: MessagesQueue
iamRoleStatements:
- Effect: Allow
Action:
- sqs:*
Resource:
Fn::GetAtt: [ MessagesQueue, Arn ]
package:
artifact: target/example-1.0.0.jar
functions:
dequeue:
handler: com.example.Handler
events:
- schedule: rate(2 minutes)
resources:
Resources:
MessagesQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${self:service}-queue
这是处理程序类:
package com.example
import com.amazonaws.services.lambda.runtime.Context
import com.amazonaws.services.lambda.runtime.RequestHandler
import org.slf4j.LoggerFactory
import com.amazonaws.services.sqs.AmazonSQSClientBuilder
class Handler:RequestHandler<Map<String, Any>, Any> {
override fun handleRequest(input:Map<String, Any>, context:Context):Any {
LOG.info("Initializing SQS Client...")
val sqs = AmazonSQSClientBuilder.defaultClient()
LOG.info("SQS Client Initialized!")
return Any()
}
companion object {
private val LOG = LoggerFactory.getLogger(Handler::class.java)
}
}
我在我的 POM 上使用以下 AWS 依赖项:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.11.251</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
</dependency>
我的问题:
我的 lambda 正在记录如下:
START RequestId: ac75e49e-e56e-11e7-ba03-39085056ac2f Version: $LATEST
[2017-12-20 10:15:18.015] ac75e49e-e56e-11e7-ba03-39085056ac2f INFO c.p.Handler - Initializing SQS Client...
END RequestId: ac75e49e-e56e-11e7-ba03-39085056ac2f
REPORT RequestId: ac75e49e-e56e-11e7-ba03-39085056ac2f Duration: 6006.13 ms Billed Duration: 6000 ms Memory Size: 128 MB Max Memory Used: 60 MB
2017-12-20T10:15:23.185Z ac75e49e-e56e-11e7-ba03-39085056ac2f Task timed out after 6.01 seconds
所以当我尝试初始化 SQS 客户端时,基本上会发生一些不好的事情,因为我看不到“完成”日志,导致 Lambda 超时。
我已经搜索了一些使用 java 的工作示例作为一个简单的出列的 lambda,但我找不到任何有值(value)的东西,只有没有 lambda 的 SQS SDK 示例。
我做错了什么吗?我可能需要在 Lambda 中使用另一个 SDK 吗?
最佳答案
这个问题的答案已经在问题的评论部分进行了讨论。但我想强调的是如果遇到这样的问题如何解决,这样这个问题就会得到答案,也可能对社区有所帮助。
当遇到 Lambda 未执行特定部分代码而终止的问题时,可能是由于以下原因造成的。
原因 1:Lambda 超时,甚至在完成处理之前。 Lambda 旨在成为可用于小型任务的无服务器架构。如果你想运行一个需要一直运行的进程,我推荐使用 EC2 实例。因此,每个 Lambda 函数都有一个超时来完成该过程。因此增加 Lambda 函数的超时时间可以解决这个问题。 (永远不要将超时设置为最多 5 分钟,因为意外的函数超时可能会让您付出很多代价)-这就是这个问题的答案。
原因 2:如果函数像在 NodeJS 中一样使用异步调用,您的 lambda 可以在您仍在执行异步调用时终止。因此,有一种机制,在所有异步调用都返回它们的值之前,lambda 不会终止。解决此问题的最佳方法是使用同步调用库而不是异步调用。
原因 3:代码中出现错误的最明显原因。这将终止 Lambda,您可以在其中看到错误并相应地修复它。
原因 4:这也可能是由于内存等资源分配不当造成的。如果您的函数需要一定的内存来执行,请通过预先估计在测试环境中运行该函数所需的正确值来预先分配它。
关于java - 无法使用 Lambda 中的 SQS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47904490/
可以使用 lambda 和函数创建有序对(Lisp 中的缺点),如 Use of lambda for cons/car/cdr definition in SICP 所示。 它也适用于 Python
我正在尝试从另一个调用一个 AWS lambda 并执行 lambda 链接。这样做的理由是 AWS 不提供来自同一个 S3 存储桶的多个触发器。 我创建了一个带有 s3 触发器的 lambda。第一
根据以下源代码,常规 lambda 似乎可以与扩展 lambda 互换。 fun main(args: Array) { val numbers = listOf(1, 2, 3) f
A Tutorial Introduction to the Lambda Calculus 本文介绍乘法函数 The multiplication of two numbers x and y ca
我想弄清楚如何为下面的表达式绘制语法树。首先,这究竟是如何表现的?看样子是以1和2为参数,如果n是 0,它只会返回 m . 另外,有人可以指出解析树的开始,还是一个例子?我一直找不到一个。 最佳答案
在 C++0x 中,我想知道 lambda 函数的类型是什么。具体来说: #include type1 foo(int x){ return [x](int y)->int{return x * y
我在其中一个职位发布中看到了这个问题,它询问什么是 lambda 函数以及它与高阶函数的关系。我已经知道如何使用 lambda 函数,但不太自信地解释它,所以我做了一点谷歌搜索,发现了这个:What
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
Evaluate (((lambda(x y) (lambda (x) (* x y))) 5 6) 10) in Scheme. 我不知道实际上该怎么做! ((lambda (x y) (+ x x
我正在处理 MyCustomType 的实例集合如下: fun runAll(vararg commands: MyCustomType){ commands.forEach { it.myM
Brian 在他对问题 "Are side effects a good thing?" 的论证中的前提很有趣: computers are von-Neumann machines that are
在 Common Lisp 中,如果我希望两个函数共享状态,我将按如下方式执行 let over lambda: (let ((state 1)) (defun inc-state () (in
Evaluate (((lambda(x y) (lambda (x) (* x y))) 5 6) 10) in Scheme. 我不知道实际上该怎么做! ((lambda (x y) (+ x x
作为lambda calculus wiki说: There are several possible ways to define the natural numbers in lambda cal
我有一个数据类,我需要初始化一些 List .我需要获取 JsonArray 的值(我使用的是 Gson)。 我做了这个函数: private fun arrayToList(data: JsonAr
((lambda () )) 的方案中是否有简写 例如,代替 ((lambda () (define x 1) (display x))) 我希望能够做类似的事情 (empty-lam
我在 Java library 中有以下方法: public void setColumnComparator(final int columnIndex, final Comparator colu
我正在研究一个函数来计算国际象棋游戏中棋子的有效移动。 white-pawn-move 函数有效。当我试图将其概括为任一玩家的棋子 (pawn-move) 时,我遇到了非法函数调用。我已经在 repl
考虑这段代码(在 GCC 和 MSVC 上编译): int main() { auto foo = [](auto p){ typedef decltype(p) p_t;
我正在阅读一个在 lambda 内部使用 lambda 的片段,然后我想通过创建一个虚拟函数来测试它,该函数从文件中读取然后返回最大和最小数字。 这是我想出来的 dummy = lambda path
我是一名优秀的程序员,十分优秀!