У меня есть такой поток интеграции с использованием Spring Integration 4.3.x:
<int:gateway> => <int:transformer> => <int-http:outbound-gateway> => <int:transformer> => return to the gateway
Шлюз определяется интерфейсом с несколькими методами, некоторые из которых имеют возвращаемый тип, а некоторые нет. Действительно, я вызываю REST API через исходящий HTTP-шлюз, и некоторые методы возвращают что-то значимое, другие - ничего (например: пустой ответ + код состояния, который я просто использую для обнаружения ошибок).
Как только я вызываю какой-либо метод шлюза с возвращаемым типом, все работает нормально. Когда я вызываю один с типом возврата void, я получаю эту ошибку:
org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
Я много искал, читал документацию SI и отлаживал, и в итоге я пришел к следующему: org.springframework.integration.gateway.GatewayProxyFactoryBean.invokeGatewayMethod(MethodInvocation, boolean)
, который по существу делает следующее: если ожидается ответ, выполните «sendAndReceive», в противном случае выполните простую «отправку». Первый устанавливает заголовок replyChannel
, второй - нет.
В этом есть смысл, но ... почему бы просто не установить автоматически заголовок NullChannel
replyChannel
в последнем случае? Я не совсем понимаю, является ли это поведение (например, получение исключения всякий раз, когда поток дает ответ, который не может быть преобразован в ответ шлюза), желаемым, потому что я не могу найти никакого упоминания о нем в документация. Документы, похоже, предполагают, что любой ответ просто игнорируется, но это не тот случай, и теперь мне нужно поместить преобразователь в цепочку, который устанавливает заголовок NullChannel
replyChannel
всякий раз, когда я обнаруживаю, что фактический ответ не будет возвращен ... действительно, то, что я ожидал, что шлюз сделает за меня. В самом деле, похоже, что методы void в шлюзах могут работать "из коробки" только тогда, когда у вас есть адаптер в качестве конечной конечной точки потока.
Возможно, я что-то упускаю, поэтому вопрос в этом и заключается.