Skip to main content

Apache Camel

Overview

Apache Camel digunakan sebagai integration router untuk log processing.

Configuration

Docker Compose

camel:
image: clm-camel:latest
build:
context: ./configs/camel
dockerfile: Dockerfile
container_name: camel-router
depends_on:
- opensearch
environment:
OPENSEARCH_URL: https://opensearch:9200
OPENSEARCH_USERNAME: admin
OPENSEARCH_PASSWORD: MyStrong@OpenSearch2026!
CAMEL_LOG_LEVEL: INFO
ports:
- "8181:8181"
- "8890:8888"
mem_limit: 256m
cpus: "0.25"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8181/actuator/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s

Routes

REST API Route

@Component
public class ApiRoute extends RouteBuilder {

@Override
public void configure() throws Exception {
rest("/api/v1")
.get("/camel/health")
.to("direct:health")
.get("/camel/routes")
.to("direct:routes");

from("direct:health")
.setBody(constant("{\"status\": \"healthy\"}"))
.marshal().json();

from("direct:routes")
.process(exchange -> {
List<RouteDefinition> routes = getContext().getRouteDefinitions();
exchange.getIn().setBody(routes);
})
.marshal().json();
}
}

OpenSearch Route

@Component
public class OpenSearchRoute extends RouteBuilder {

@Override
public void configure() throws Exception {
from("timer:healthCheck?period=30000")
.to("direct:checkOpenSearchHealth")
.marshal().json();

from("direct:checkOpenSearchHealth")
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
.to("https://opensearch:9200/_cluster/health?sslVerify=false&httpMethod=GET");
}
}

Integration Route

@Component
public class IntegrationRoute extends RouteBuilder {

@Override
public void configure() throws Exception {
from("direct:integrateData")
.log("Processing data: ${body}")
.process(exchange -> {
String data = exchange.getIn().getBody(String.class);
// Transform data
String transformed = transformData(data);
exchange.getIn().setBody(transformed);
})
.to("direct:indexToOpenSearch");

from("direct:indexToOpenSearch")
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
.to("https://opensearch:9200/_bulk?sslVerify=false");
}
}

Actuator Endpoints

EndpointDescription
/actuator/healthHealth check
/actuator/infoApplication info
/actuator/metricsMetrics
/actuator/prometheusPrometheus metrics

Monitoring

Health Check

curl http://localhost:8181/actuator/health

Routes

curl http://localhost:8181/actuator/camelroutes

Troubleshooting

Check Logs

docker logs camel-router --tail 100

Test Route

curl http://localhost:8181/api/v1/camel/health

Next Steps