Я использую стандартный Spring @RestController
внутри приложения Spring Boot, которое вызывает Spring Integration, чтобы инициировать поток сообщений. Насколько я понимаю, крючком для Spring Integration в этом случае является использование шлюза - кажется, есть несколько разных способов сделать это с помощью Java DSL.
В настоящее время у меня это работает двумя разными способами:
- путем определения интерфейса, отмеченного аннотацией
@MessagingGateway
. - путем создания экземпляра
new GatewayProxyFactoryBean(Consumer.class)
и установки канала.
Оба они кажутся немного неуклюжими - кажется, есть третий, более чистый способ, который позволяет вам не аннотировать или вручную создавать GatewayProxyFactoryBean, а просто использовать встроенный функциональный интерфейс с именем bean-компонента. Из документов:
@Bean
public IntegrationFlow errorRecovererFlow() {
return IntegrationFlows.from(Function.class, "errorRecovererFunction")
.handle((GenericHandler<?>) (p, h) -> {
throw new RuntimeException("intentional");
}, e -> e.advice(null))
.get();
}
@Autowired
@Qualifier("errorRecovererFunction")
private Function<String, String> errorRecovererFlowGateway;
Однако bean-компонент errorRecovererFunction
не регистрируется, и приложение не запускается.
Field errorRecovererFlowGateway in MyController required a bean of type 'java.util.function.Function' that could not be found.
Я что-то упустил?
Заранее спасибо.
@EnableIntegration
или это приложение Spring Boot. Также убедитесь, что контроллер и поток интеграции находятся в одном контексте. - person Artem Bilan   schedule 12.10.2018