У меня есть RouteBuilder, как показано ниже.
from("seda:requestQueue").routeId("service_request").log(LoggingLevel.INFO, "Processing STARTED, {body = ${body}")
.setBody(body())
.to("select * from SERVICE_REQUEST WHERE requestType=:#TYPE AND requestDate=:#date AND owner=:#OWNER)
.split(body()).streaming().process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Map<String, Object> row = exchange.getIn().getBody(Map.class);
if (row == null) {
LOGGER.info("Request is new. No records found.");
return;
}
//Duplicate request. Q(Not sure how to terminate the process with exception)
}
})
.log(LoggingLevel.INFO, "Processing CONTINUE, {body = ${body}")
.setBody(body())
.to("insert into SERVICE_REQUEST (ID,....) ").log(LoggingLevel.INFO, "Processing COMPLETED").end();
Я бы хотел достичь
- Всякий раз, когда подается запрос (на данный момент через SEDA), сначала проверьте, был ли тот же запрос доступен в базе данных или нет.
- Если он недоступен, вставить только в базу данных (новая строка)
Вопрос:
1. Как я могу установить исходное тело запроса для insertQuery? Согласно приведенному выше коду, тело, полученное в seda: requestQueue недоступно для ("вставить в SERVICE ..).