Интеграция Spring - DSL - Split или Fork

Я хочу создать поток IntegrationFlow для следующего потока.

Интеграция Spring - DSL - Split или Fork

  1. От начала до доставки - это поток синхронизации.
  2. Как извлечь / разветвить конечный асинхронный узел из элементов сборки и проверки элементов.

	@Bean
	public IntegrationFlow buildCart() {
		return f -> f.handle(validate, "buildPreCheck")
.handle(preProcessProcessor)
.handle(getOffersProcessor)
.handle(buildItems)
**.wireTap(log())**
.handle(validateItems)
.handle(deliver);
	}

Обновлено:

Привет, Артем, я добавил Wire Tap, как в приведенном ниже коде. Тем не менее, он исключает узел WireTap как Sequencal и ждет этого узла.

Пожалуйста, помогите сделать его узлом Aysnc.

@Bean
public IntegrationFlow log() {
    return f -> f.handle(auditProcessor).channel("nullChannel");
}



@ServiceActivator
@Description("Call and get the Offers Request")
public void getDetails(Message<Context> message) throws InterruptedException {
    log.info("getDetails-Sleep-Start");
    Thread.sleep(3000);
    log.info("getDetails-Sleep-End");
}

Вам обязательно нужно добавить комментарий к моему ответу, я буду уведомлен. В противном случае ваша правка останется без внимания.

Artem Bilan 04.09.2018 20:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
508
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Spring Integration Java DSL мы все упускаем из виду, что одним из очень важных компонентов Spring Integration является MessageChannel. И дело в том, что каналы могут быть добавлены в поток всякий раз, когда нам нужно больше, чем DirectChannel по умолчанию. Для асинхронного выполнения у нас есть ExecutorChannel. Но прежде чем мы перейдем к разветвленному потоку, нам нужно как-то туда прыгнуть, не нарушая основной. В терминах EIP это называется Wire-Tap: https://www.enterpriseintegrationpatterns.com/patterns/messaging/WireTap.html.

Spring Integration Java DSL предлагает такую ​​реализацию, как оператор .wireTap() в потоке. Логика аудита может быть реализована в выделенном подпотоке или через канал, но не забывайте о ExecutorChannel!

Вы можете увидеть больше информации в Справочном руководстве: https://docs.spring.io/spring-integration/reference/html/java-dsl.html#java-dsl-wiretap

ОБНОВИТЬ

В

.handle(buildItems)
.wireTap(log())

правильный путь: вы собираетесь проверить результат buildItems и перейти к следующему шагу.

log() необходимо модифицировать следующим образом:

@Bean
public IntegrationFlow log() {
    return f -> f.channel(c -> c.executor(taskExecutorBean())).handle(auditProcessor).channel("nullChannel");
}

Обратите внимание на c.executor(). Таким образом, мы добавляем асинхронную передачу для нашего подпотока log().

Пожалуйста, найдите ОБНОВЛЕНИЕ в моем ответе.

Artem Bilan 04.09.2018 20:59

Спасибо, Артем.

Aksanth 04.09.2018 21:59

Другие вопросы по теме