Apache Camel проверяет перед вставкой данных с помощью setBody - PullRequest
1 голос
/ 22 апреля 2019

У меня есть 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();

Я бы хотел достичь

  1. Всякий раз, когда подается запрос (на данный момент через SEDA), сначала проверьте, был ли тот же запрос доступен в базе данных или нет.
  2. Если он недоступен, вставить только в базу данных (новая строка)

Вопрос: 1. Как я могу установить исходное тело запроса для insertQuery? Согласно приведенному выше коду, тело, полученное в seda: requestQueue недоступно для ("вставить в SERVICE ..).

1 Ответ

0 голосов
/ 23 апреля 2019

Ваш сплиттер будет отправлять сообщения с новым телом (на основе SQL). Таким образом, само тело не может быть использовано.

Вместо этого перед вызовом сплиттера установите тело в свойство Exchange. Затем, когда вам нужно его использовать, прочитайте значение свойства.

.setProperty("mySampleProperty", simple("${body}")

Если вам нужно вернуть его в качестве тела, то - в этот момент - установите для тела значение, которое вы ранее сохранили в свойстве Exchange.

Вот похожий вопрос: Apache Camel: как хранить переменную для последующего использования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...