서로 다른 시스템은 서로 다른 데이터 형식을 사용합니다. 레거시 시스템은 XML을, 현대 API는 JSON을, 배치 시스템은 CSV를 사용할 수 있습니다. Camel은 이런 데이터 변환을 라우트 중간에 자연스럽게 처리합니다.
메시지의 본문이나 구조를 다른 형식으로 변환하는 패턴입니다. 다양한 방법으로 구현할 수 있습니다.
from("direct:input")
.setBody(simple("주문번호: ${header.orderId}, 고객: ${body.customerName}"))
.log("변환 결과: ${body}"); from("file:inbox?noop=true")
.process(exchange -> {
String csv = exchange.getIn().getBody(String.class);
Order order = csvToOrder(csv); // CSV → Java 객체 변환
exchange.getIn().setBody(order);
})
.to("jms:queue:orders"); @Component
public class OrderTransformer {
public Order transform(String csvLine) {
String[] parts = csvLine.split(",");
return new Order(parts[0], parts[1], Double.parseDouble(parts[2]));
}
}
// 라우트
from("direct:csvInput")
.bean(OrderTransformer.class, "transform")
.log("변환된 주문: ${body}"); 외부 소스에서 추가 데이터를 가져와 메시지를 보강하는 패턴입니다. 두 가지 구현 방법이 있습니다.
from("direct:newOrder")
// 고객 정보 파일에서 추가 정보 가져오기
.enrich("file:customer-data?fileName=${header.customerId}.xml",
new CustomerEnricher())
.to("direct:processEnrichedOrder");
public class CustomerEnricher implements AggregationStrategy {
@Override
public Exchange aggregate(Exchange original, Exchange resource) {
Order order = original.getIn().getBody(Order.class);
String customerXml = resource.getIn().getBody(String.class);
order.setCustomerDetails(parseCustomer(customerXml));
original.getIn().setBody(order);
return original;
}
} from("direct:checkInventory")
.enrich("http://inventory-service/api/stock/${header.productId}",
(original, enriched) -> {
Order order = original.getIn().getBody(Order.class);
int stock = enriched.getIn().getBody(Integer.class);
order.setAvailableStock(stock);
original.getIn().setBody(order);
return original;
})
.choice()
.when(simple("${body.availableStock} > 0"))
.to("direct:confirmOrder")
.otherwise()
.to("direct:backOrderProcess")
.end(); from("direct:order")
.setHeader("timestamp", simple("${date:now:yyyy-MM-dd'T'HH:mm:ss}"))
.setHeader("source", constant("web-order"))
.removeHeader("sensitiveData")
.removeHeaders("temp.*") // 정규식으로 여러 헤더 제거
.to("jms:queue:orders"); AI가 해킹 도구로 진화했습니다. 27초 만에 공격 코드 작성, AI 봇의 랜섬웨어 협상, GPU 탈취까지—삼성SDS…
필기 시험의 접근통제 영역은 용어 하나만 알아도 풀리는 문제와 개념을 뒤집어 묻는 문제가 섞여 나옵니다.…
유튜브에 AI 자동 생성 영상이 넘쳐납니다. 진짜 크리에이터들은 어떻게 살아남아야 할까요? AI와 경쟁하는 3가지 생존…
이틀 전에 사이드카가 걸렸을 때만 해도 "한 번 놀란 장"으로 끝날 줄 알았는데요. 15일 아침…
오전 시황 글에 이어 장중 후속 정리입니다. 코스피는 개장 직후 5%대였던 낙폭이 오전 10시 전후에…
10월 15일 목요일 아침, 코스피가 전날 종가보다 5.59% 낮은 5,673.01로 출발했습니다. 장 시작 7분 만에…