Когда я должен использовать nullChannel() вместо get() в DSL Spring Integration?

#spring-integration #spring-integration-dsl

Вопрос:

Может ли кто-нибудь дать четкое объяснение, когда использовать nullChannel() по сравнению с тем, когда использовать get() при настройке потока SI с DSL ?

Ответ №1:

Это кратчайший nullChannel() путь из .channel(“nullChannel”).get() . Но у него все еще есть эта логическая цель, чтобы дать понять целевому разработчику, что это конец потока, и мы не можем продолжить обработку после nullChannel этого, так как этот канал не может быть подписан на использование отправленных ему сообщений.

Если вас смущает , почему нужно указывать a nullChannel , если, вероятно, этого будет достаточно get() , то ответ таков: это возможно и допустимый вариант использования, когда вы полагаетесь на replyChannel заголовок для получения результата из вашей конечной точки. Но если вы полностью хотите аннулировать этот результат, nullChannel он должен быть настроен явно.

Комментарии:

1. Спасибо @ArtemBilan. Вот к чему я пытаюсь подойти. Почему я иногда получаю ошибку, если завершаю свой поток без настройки этого канала NULL, в то время как в других случаях можно опустить его и закончить простым .get()? Какая часть моего кода DSL делает необходимым настройку этого нулевого канала ? Я могу использовать сообщение об ошибке, чтобы дать мне подсказку, когда мне это понадобится, но я бы предпочел понять, что на самом деле вызывает ошибку и какова основная конструкция и идея, которые я еще не понимаю. Я предполагаю, что существуют определенные методы DSL, которые заставляют меня настраивать этот нулевой канал? Какие именно?

2. Это nullChannel всего лишь конкретный образец выходного канала. Существуют односторонние обработчики и обработчики запросов и ответов. Таким образом, вам определенно не нужно настраивать выходной канал или думать о replyChannel заголовке, если он односторонний. Если вы хотите вернуть результат обработчика запроса-ответа вызывающему абоненту в начале потока (входящий шлюз), то вы также опускаете выходной канал и полагаетесь на replyChannel заголовок. Но если вы хотите продолжить поток где-то с этим результатом, вы настраиваете вывод на конечной точке ответа. nullChannel Чтобы остановить поток.