Apache Camel: В чем разница между переводчиком сообщений и обогащением контента на примере? - PullRequest
0 голосов
/ 05 марта 2020

Я попал в базу данных 10 сотрудников; на основе каждого сотрудника я обращаюсь к другой базе данных, получаю некоторую информацию и объединяю ее.

Насколько я понимаю, это можно сделать либо в .process (), либо в .enrich () (используя агрегатор)

                    .to("jdbc:masterdata?outputClass=com.diavry.integrator.Employee")
                    .to("log:?level=INFO&showBody=true")                    
                    .process(e -> { 
                        List<Employee> eiEmployees = (List<Employee>) e.getIn().getBody(List.class);

                        for (Employee employee : eiEmployees) {

                            PreparedStatement statement = otherDbConnection.prepareStatement(sql);
                            statement.setString(1, employee.getUserid());
                            statement.setString(2, employee.getCompanyid());
                            resultSet = statement.executeQuery();
                            if (resultSet.next()) {
                                legalUnitName = resultSet.getString(1);
                            }
                            employee.setOrgstr_unitname(legalUnitName);
                        }
                    })

Теперь я могу сделать то же самое в Агрегаторе, где я могу обогатить оригинал приведенным выше кодом и вернуться обратно.

Я не получаю разницы между двумя в отношении приведенного выше варианта использования?

1 Ответ

1 голос
/ 06 марта 2020

Ну, главное отличие в том, что вы написали код JDB C в вашем Processor (1). Другое отличие состоит в том, что вы управляете итерацией, чтобы самостоятельно получать подробные данные для каждого сотрудника. Это также означает, что вам нужно самостоятельно обрабатывать любые ошибки (как восстановить, если обработка прерывается в середине итерации и т. Д. c).

Решение Camel для решения этого варианта использования:

  1. JDB C вызов для получения сотрудников
  2. Splitter для разделения сотрудника список в отдельные сообщения (создает «итерацию»)
  3. JDB C вызов подробных данных на сотрудника
  4. дальнейшее подробное сообщение процесса или агрегирование всех подробных сообщений , в зависимости от вашего дальнейшая обработка требует

Это главных магов c верблюда ! Не нужно писать много кода "транспортного уровня" . Просто напишите одну строку Camel DSL, чтобы запросить базу данных, увеличить потребителя JMS и любую другую технологию интеграции, о которой вы только можете подумать.

И, конечно, все EIP - это реализуемые , которые являются общими проблемы интеграции.

(1) Примечание: я рекомендую отказаться от интерфейса низкого уровня Processor в пользу simple Java Beans .

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