У меня есть szenario, который кажется на первый взгляд, как идеальная подгонка для использования агрегата для интеграции пружин:Весна Интеграция Агрегатор или Маршрутизатор правильный узор?
В настоящее время производится большое количество отчетов в формате PDF. Они печатаются через Printrequests в очередь JMS. Сервер печати принимает клиентские сокеты с запросами печати.
Чтобы достичь определенной «справедливости» с точки зрения нагрузки, мы хотели бы объединить запросы на печать для того же принтера. Затем отправьте агрегированные запросы на сервер печати. У нас есть критерии полноты для агрегированных запросов, в основном число pdf, созданных для «Batch», а также уникальный ключ для каждой партии в запрошенных отчетах PDF. Затем агрегированные запросы будут «отправляться» через активатор службы на сервер печати через один и тот же клиентский Socket. Таким образом, в основном мы применяем подход, описанный в Spring Integration Documentation.
Проблема: отчеты начнутся только при печати, когда будет подготовлен последний отчет «Пакет» в формате pdf, который, похоже, создает довольно горлышко бутылки.
В идеале мы можем начать печатать, как только первое сообщение MessageGroup прибывает и эффективно агрегирует результаты запроса на печать.
Я думал добиться этого обычая MessageStore, где метод
public void add(Message<?> messageToAdd)
реализует дополнительную логику называют сервера печати и на самом деле объединения ответов сервера. Что-то вроде «активного» MessageStore.
Но тогда добавление метода настраиваемого MessageStore может быть «большим» узким местом ... блокирование каждого добавления в «активное» MessageStore ... и также похоже на неправильную метафору: Store vs Processing something.
Является ли Агрегатор правильным подходом для этих требований?
Или я должен идти больше для подхода динамического канала маршрутизатора в проделать описанный Dynamic Ftp Spring Integration Example
С ребенком (ы)/родительским applicationscontext для каждой «Batch» запросов на печати? Там жизненный цикл childs applicationcontext не совсем ясен для меня.
В идеале я бы в состоянии управлять все контексты в - Чайлдс и родителей с JMX, как описано в the Monitoring Example of Spring Integration
Я вижу вашу точку ;-) .... просто ищу правильный шаблон и абстракции с помощью Spring Integration, которая, кстати здорово! – chenrici
Это не так, что я хочу свести к минимуму нагрузку на сеть, но групповые запросы, отправить их на постоянное соединение и форму, чтобы иметь детерминированные критерии, чтобы закрыть соединение снова. Там я верю, что Aggreator будет идеально подходит, Но да, я жду, пока агрегация не будет завершена. Что не подходит для подхода к маршрутизатору, который вы предлагаете, и который я сейчас наблюдаю, но здесь я не вижу, как я могу детерминистически закрыть дочерний контекст с гнездом канала на сокет на основе ввода сообщений.? – chenrici
Это похоже на другую историю ... И мне совершенно непонятно, почему у вас должен быть детский контекст на один сокет. У вас есть строгое количество серверов печати, поэтому просто настройте '' для каждого из них и соответствующего адаптера канала для связи через клиентский сокет. Вы можете закрыть и повторно подключиться каким-либо внешним событием или интервалом ожидания. –