Apache camel con aws sqs v2
Apache camel integrado a aws sqs
Unos de los principales problemas que se tiene a la hora de querer implementar la ultima versión de apache camel es no tener una buena documentación o si la hay no hay ejemplos funcionales, primero hay que tener en cuenta que vamos a trabajar con la version apache camel-core 3.18.0 y de aws v2 2.17.232.
Es muy importante la compatibilidad entre versiones, porque te puede dar muchos errores.
Dependencias java
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<aws.sdk2.version>2.17.232</aws.sdk2.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws.sdk2.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>3.18.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.camel/camel-aws2-sqs -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-aws2-sqs</artifactId>
<version>3.18.0</version>
</dependency>
<!-- use the same version as your Camel core version -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
<!-- logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
En el siguiente fragmento de código, creamos el client de aws sqs , y se lo asignamos al contexto de de camel.
MainApp.java
public class MainApp {
public static void main(String... args) throws Exception {
// create aws sqs client
SqsClient sqsClient = SqsClient.builder()
.region(Region.US_EAST_1).build();
DefaultCamelContext ctx = new DefaultCamelContext();
try {
ctx.getRegistry().bind("sqsClient", sqsClient);
ctx.addRoutes(new SQSRouteBuilder());
ctx.start();
Thread.sleep(60 * 60 * 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
A continuación vamos a configurar el comportamiento, para obtener los mensajes del sqs.
SQSRouteBuilder.java
public class SQSRouteBuilder extends RouteBuilder {
public void configure() {
from("aws2-sqs://demo-camel-test?amazonSQSClient=#sqsClient")
.log("Processing ..... ${body}")
.to("mock:result")
}
}
Notas:
- Revisa las versiones de compatibilidad entre versiones del core de camel y de aws o de los .jar que uses.
- Coloca en tu maquina unas credenciales validas para que te puedas conectar a las colas de sqs
- Si necesitas registrar componentes en la versión de camel core 3.18.0 , debes hacerlo con el Register ejemplo
MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();
// configuration ibm mq
ctx.getRegistry().bind("mq", JmsComponent.jmsComponentAutoAcknowledge(mqQueueConnectionFactory));
Referencias: