diff --git a/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java b/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java
new file mode 100644
index 00000000..24fe946c
--- /dev/null
+++ b/aws-lambda-java-events/src/main/java/com/amazonaws/services/lambda/runtime/events/RabbitMQEvent.java
@@ -0,0 +1,57 @@
+package com.amazonaws.services.lambda.runtime.events;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Represents a Rabbit MQ event sent to Lambda
+ * Onboarding Amazon MQ as event source to Lambda
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(setterPrefix = "with")
+public class RabbitMQEvent {
+
+ private String eventSource;
+ private String eventSourceArn;
+ private Map> rmqMessagesByQueue;
+
+ @Data
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Builder(setterPrefix = "with")
+ public static class RabbitMessage {
+ private BasicProperties basicProperties;
+ private boolean redelivered;
+ private String data;
+ }
+
+ @Data
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Builder(setterPrefix = "with")
+ public static class BasicProperties {
+
+ private String contentType;
+ private String contentEncoding;
+ private Map headers;
+ private int deliveryMode;
+ private int priority;
+ private String correlationId;
+ private String replyTo;
+ private int expiration;
+ private String messageId;
+ private String timestamp;
+ private String type;
+ private String userId;
+ private String appId;
+ private String clusterId;
+ private int bodySize;
+ }
+}
diff --git a/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java b/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java
index 0216d5e3..68cd37d3 100644
--- a/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java
+++ b/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/EventLoader.java
@@ -105,6 +105,10 @@ public static SQSEvent loadSQSEvent(String filename) {
return loadEvent(filename, SQSEvent.class);
}
+ public static RabbitMQEvent loadRabbitMQEvent(String filename) {
+ return loadEvent(filename, RabbitMQEvent.class);
+ }
+
public static T loadEvent(String filename, Class targetClass) {
if (!filename.endsWith("json")) {
diff --git a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java
index 3bdd8eae..8f8fe50a 100644
--- a/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java
+++ b/aws-lambda-java-tests/src/test/java/com/amazonaws/services/lambda/runtime/tests/EventLoaderTest.java
@@ -304,4 +304,38 @@ public void testLoadSecretsManagerRotationEvent() {
.returns("arn:aws:secretsmanager:eu-central-1:123456789012:secret:/powertools/secretparam-xBPaJ5", from(SecretsManagerRotationEvent::getSecretId))
.returns("CreateSecret", from(SecretsManagerRotationEvent::getStep));
}
+
+ @Test
+ public void testLoadRabbitMQEvent() {
+ RabbitMQEvent event = EventLoader.loadRabbitMQEvent("rabbitmq_event.json");
+ assertThat(event).isNotNull();
+ assertThat(event)
+ .returns("aws:rmq", from(RabbitMQEvent::getEventSource))
+ .returns("arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", from(RabbitMQEvent::getEventSourceArn));
+
+ Map> messagesByQueue = event.getRmqMessagesByQueue();
+ assertThat(messagesByQueue).isNotEmpty();
+ List messages = messagesByQueue.get("test::/");
+ assertThat(messages).hasSize(1);
+ RabbitMQEvent.RabbitMessage firstMessage = messages.get(0);
+ assertThat(firstMessage)
+ .returns(false, RabbitMQEvent.RabbitMessage::getRedelivered)
+ .returns("eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==", RabbitMQEvent.RabbitMessage::getData);
+
+ RabbitMQEvent.BasicProperties basicProperties = firstMessage.getBasicProperties();
+ assertThat(basicProperties)
+ .returns("text/plain", from(RabbitMQEvent.BasicProperties::getContentType))
+ .returns(1, from(RabbitMQEvent.BasicProperties::getDeliveryMode))
+ .returns(34, from(RabbitMQEvent.BasicProperties::getPriority))
+ .returns(60000, from(RabbitMQEvent.BasicProperties::getExpiration))
+ .returns("AIDACKCEVSQ6C2EXAMPLE", from(RabbitMQEvent.BasicProperties::getUserId))
+ .returns(80, from(RabbitMQEvent.BasicProperties::getBodySize))
+ .returns("Jan 1, 1970, 12:33:41 AM", from(RabbitMQEvent.BasicProperties::getTimestamp));
+
+ Map headers = basicProperties.getHeaders();
+ assertThat(headers).hasSize(3);
+ Map> header1 = (Map>) headers.get("header1");
+ assertThat(header1.get("bytes")).contains(118, 97, 108, 117, 101, 49);
+ assertThat((Integer) headers.get("numberInHeader")).isEqualTo(10);
+ }
}
diff --git a/aws-lambda-java-tests/src/test/resources/rabbitmq_event.json b/aws-lambda-java-tests/src/test/resources/rabbitmq_event.json
new file mode 100644
index 00000000..1f57c53a
--- /dev/null
+++ b/aws-lambda-java-tests/src/test/resources/rabbitmq_event.json
@@ -0,0 +1,51 @@
+{
+ "eventSource": "aws:rmq",
+ "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",
+ "rmqMessagesByQueue": {
+ "test::/": [
+ {
+ "basicProperties": {
+ "contentType": "text/plain",
+ "contentEncoding": null,
+ "headers": {
+ "header1": {
+ "bytes": [
+ 118,
+ 97,
+ 108,
+ 117,
+ 101,
+ 49
+ ]
+ },
+ "header2": {
+ "bytes": [
+ 118,
+ 97,
+ 108,
+ 117,
+ 101,
+ 50
+ ]
+ },
+ "numberInHeader": 10
+ },
+ "deliveryMode": 1,
+ "priority": 34,
+ "correlationId": null,
+ "replyTo": null,
+ "expiration": "60000",
+ "messageId": null,
+ "timestamp": "Jan 1, 1970, 12:33:41 AM",
+ "type": null,
+ "userId": "AIDACKCEVSQ6C2EXAMPLE",
+ "appId": null,
+ "clusterId": null,
+ "bodySize": 80
+ },
+ "redelivered": false,
+ "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
+ }
+ ]
+ }
+}
\ No newline at end of file