GH-438 Added initial support for ALB request/response
Added initila support for Application Load Balancer request and response events. This support for now is only protocol based (see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#respond-to-load-balancer) Added initial tests Resolves #438
This commit is contained in:
@@ -21,7 +21,6 @@ import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -44,6 +43,7 @@ import org.springframework.cloud.function.context.catalog.FunctionInspector;
|
||||
import org.springframework.cloud.function.utils.FunctionClassUtils;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.support.MessageBuilder;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -78,12 +78,21 @@ public class FunctionInvoker implements RequestStreamHandler {
|
||||
Message<byte[]> responseMessage = this.function.apply(requestMessage);
|
||||
|
||||
byte[] responseBytes = responseMessage.getPayload();
|
||||
if (requestMessage.getHeaders().containsKey("httpMethod")) {
|
||||
Map<String, Object> requestPayloadMap = this.getRequestPayloadAsMap(requestMessage);
|
||||
if (requestPayloadMap != null && requestPayloadMap.containsKey("httpMethod")) {
|
||||
Map<String, Object> response = new HashMap<String, Object>();
|
||||
response.put("isBase64Encoded", false);
|
||||
response.put("statusCode", 200);
|
||||
|
||||
int statusCode = responseMessage.getHeaders().containsKey("statusCode")
|
||||
? (int) responseMessage.getHeaders().get("statusCode")
|
||||
: 200;
|
||||
|
||||
HttpStatus httpStatus = HttpStatus.valueOf(statusCode);
|
||||
|
||||
response.put("statusCode", statusCode);
|
||||
response.put("statusDescription", httpStatus.toString());
|
||||
response.put("body", new String(responseMessage.getPayload(), StandardCharsets.UTF_8));
|
||||
response.put("headers", Collections.singletonMap("foo", "bar"));
|
||||
response.put("headers", responseMessage.getHeaders());
|
||||
|
||||
responseBytes = mapper.writeValueAsBytes(response);
|
||||
}
|
||||
@@ -138,4 +147,15 @@ public class FunctionInvoker implements RequestStreamHandler {
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private Map<String, Object> getRequestPayloadAsMap(Message<byte[]> message) {
|
||||
try {
|
||||
return this.mapper.readValue(message.getPayload(), Map.class);
|
||||
}
|
||||
catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user