Документация Spring DSL предоставляет пример проекта - caféSpring Integration Пример DSL Cafe - как подключаются каналы?
Я не уверен в том, как это работает. Приклеивание соответствующих выдержек здесь: (полный источник по ссылке выше)
@Configuration
@EnableAutoConfiguration
@IntegrationComponentScan
public class Application {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
Cafe cafe = ctx.getBean(Cafe.class);
for (int i = 1; i <= 100; i++) {
Order order = new Order(i);
order.addItem(DrinkType.LATTE, 2, false);
order.addItem(DrinkType.MOCHA, 3, true);
cafe.placeOrder(order);
}
Thread.sleep(60000);
ctx.close();
}
@MessagingGateway
public interface Cafe {
@Gateway(requestChannel = "orders.input")
void placeOrder(Order order);
}
@Bean
public IntegrationFlow orders() {
return f -> f
.split(Order.class, Order::getItems)
.channel(c -> c.executor(Executors.newCachedThreadPool()))
// SNIP
}
Читая этот пример, я неясный на пару пунктов:
Интерфейс
Cafe
выставляет@Gateway
, который соединяет доrequestChannel = "orders.input"
. Однако этот канал нигде не определен. Как это работает?Маршрутизатор DSL сниппает делают не подключен к потреблению каких-либо каналов, а также не относятся к
Cafe::placeOrder
методе - как это подключиться кorders.input
каналу получить въезднойOrder
?
Ах, неявный канал, использующий имя компонента, был темой, которую я отсутствовал. FWIW, документы могли бы сделать это немного яснее (хотя я ценю, что чернила на этом не сухие). Спасибо за разъяснения. –
Спасибо, Гэри! Марти, на самом деле, делает это для вас. См. Https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference#flows. Если это еще не ясно, пожалуйста, поднимите GH-вопрос по этому вопросу. –