2017-01-12 44 views

回答

4

這個類中的2個方法應該能夠幫助你。一個是如果你需要傳遞一個有效載荷,另一個是如果有效載荷是空的。

但是,您需要記住一件事:函數名稱可能與處理程序不同(後者在這裏是example.Orders::orderHandler)。處理程序名稱是而不是在調用其功能時使用。

所以,如果你與函數名「myFunction的」是幕後打電話給你example.Orders::orderHandler處理,那麼這就是你會傳遞到下面的方法運行什麼功能。

import com.amazonaws.regions.Regions; 
import com.amazonaws.services.lambda.AWSLambdaAsyncClient; 
import com.amazonaws.services.lambda.model.InvokeRequest; 
import com.amazonaws.services.lambda.model.InvokeResult; 

class LambdaInvoker { 

    public void runWithoutPayload(String region, String functionName) { 
     runWithPayload(region, functionName, null); 
    } 

    public void runWithPayload(String region, String functionName, String payload) { 
     AWSLambdaAsyncClient client = new AWSLambdaAsyncClient(); 
     client.withRegion(Regions.fromName(region)); 

     InvokeRequest request = new InvokeRequest(); 
     request.withFunctionName(functionName).withPayload(payload); 
     InvokeResult invoke = client.invoke(request); 
     System.out.println("Result invoking " + functionName + ": " + invoke); 
    } 
} 
+0

非常感謝的響應。!!!!!!!! 1111 @Jeshan –

+0

如果什麼有效載荷是一個複雜的java對象?我們將它轉​​換成json字符串嗎? – paramupk

+0

是的,你把它串起來。 –

0

您在部署Lambda函數時定義處理程序。只有AWS Lambda服務需要知道您的自定義處理程序是什麼。所以處理程序在調用該函數的Java代碼中沒有任何關聯。調用Lambda函數的任何內容只需要知道Lambda函數名稱,而不是處理程序名稱。

在Java中,您將通過AWSLambdaClient.invoke()方法調用Lambda函數here

1

我跟着下面的代碼和剛剛打印從拉姆達

AWSLambdaAsyncClient lambdaClient = new AWSLambdaAsyncClient(); 
    lambdaClient.withRegion(Region.getRegion(Regions.US_WEST_2)); 
    InvokeRequest invokeRequest = new InvokeRequest(); 
    invokeRequest.setInvocationType("RequestResponse"); // ENUM RequestResponse or Event 
    invokeRequest.withFunctionName("FUNCTION NAME").withPayload(payload); 
    InvokeResult invoke = lambdaClient.invoke(invokeRequest); 
    try { 
     // PRINT THE RESPONSE 
     String val = new String(invoke.getPayload().array(), "UTF-8"); 
     System.out.println("Response==> " + val); 
    } catch (Exception e) { 
     System.out.println("error"); 
    } 
相關問題