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​