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:

Apache Camel helps you integrate over 300 different systems!
Apache Camel ™ is a versatile open-source integration framework based on known Enterprise Integration Patterns. Camel empowers you to define routing and mediation rules in a variety of domain-specific languages, including a Java-based Fluent API, Spring or Blueprint XML Configuration files, and a Sc…
Running Apache Camel standalone
How to run Apache Camel in a standalone Java app