AWS Lambda - 异步调用函数但没有任何反应

时间:2017-07-06 12:10:49

标签: amazon-web-services asynchronous lambda aws-lambda aws-java-sdk

我有2个lambda函数,我的第一个函数w / c我们将调用" PostStep"调用另一个lambda函数" RetryStep"每当发生超时时都是异步的。从那时起它一直很好用。现在我必须做一些代码更改,并且在测试期间,发生了一个奇怪的问题。

超时后,它仍然异步调用RetryStep函数,但是实际上并没有调用该函数。我尝试再次调用PostStep函数,然后我注意到实际调用了RetryStep函数的时间,但是使用了之前请求的数据。

以下是我如何进行调用:

LivePostingService.class

  @Override
  public void postTransaction(Transaction transaction) {
    ... some posting logic ...
    conditionalCallRetryLambdaFunction(transaction);
  }

  private void conditionalCallRetryLambdaFunction(Transaction transaction) {
    try {
        String payload = objectMapper.writeValueAsString(transaction);
        lambdaInvokerService.invokeAsync(lambdaRetryFunctionName, payload);
    } catch (JsonProcessingException e) {
        if(LOGGER.isErrorEnabled()) {
            LOGGER.error(e.getMessage(), e);
        }
    }
  }

LambdaInvokerService.class

   @Service
   public class LambdaInvokerServiceImpl implements LambdaInvokerService {

    LOGGER.info("Calling lambda function: " + functionName + ", with payload: " + payload);
    InvokeRequest req = new InvokeRequest()
            .withFunctionName(functionName)
            .withInvocationType(InvocationType.Event)
            .withPayload(payload);

    AsyncHandler<InvokeRequest, InvokeResult> asyncHandler = new AsyncHandler<InvokeRequest, InvokeResult>() {
        @Override
        public void onError(Exception e) {
            LOGGER.error(e.getMessage());
        }

        @Override
        public void onSuccess(InvokeRequest request, InvokeResult invokeResult) {
            LOGGER.info("Success! " + invokeResult);
        }
    };

    lambdaAsyncClient.invokeAsync(req, asyncHandler);
   }

这是我的经纪人:

@Override
public Void handleRequest(DynamodbEvent dynamodbEvent, Context context) {
     livePostingService.postTransaction(transaction);
     return null;
} 

从代码中可以看出,日志调用lambda函数.. 出现在PostStep函数的末尾,但日志成功!出现在如果我再次调用PostStep函数。

与我们目前正在制作的产品相同的代码。我甚至在我们的主分支上进行了git checkout,然后在dev上运行它,但同样的问题仍然存在。你对此有什么想法吗?

谢谢!

0 个答案:

没有答案