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
| Endpoint | Description |
|---|---|
/actuator/health | Health check |
/actuator/info | Application info |
/actuator/metrics | Metrics |
/actuator/prometheus | Prometheus 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
- RabbitMQ - Message bus
- Logstash - DB sync
- OpenSearch - Storage