Это приложение является и клиентом, и сервером.
Этот вопрос был конкретно о том, как написать на стороне сервера (принять соединение), используя Spring Integration.
Метод main()
- это просто тест, который подключается к стороне сервера. Он использует стандартные API сокетов Java; он также мог бы быть написан для использования компонентов Spring Integration на стороне клиента.
Кстати, вам не нужно использовать XML для написания приложения Spring Integration, вы можете настроить его с аннотациями или использовать Java DSL. Прочитайте документацию.
EDIT
Пример клиент / сервер с использованием Java DSL
@SpringBootApplication
public class So54057281Application {
public static void main(String[] args) {
SpringApplication.run(So54057281Application.class, args);
}
@Bean
public IntegrationFlow server() {
return IntegrationFlows.from(Tcp.inboundGateway(
Tcp.netServer(1234)
.serializer(codec()) // default is CRLF
.deserializer(codec()))) // default is CRLF
.transform(Transformers.objectToString()) // byte[] -> String
.<String, String>transform(p -> p.toUpperCase())
.get();
}
@Bean
public IntegrationFlow client() {
return IntegrationFlows.from(MyGateway.class)
.handle(Tcp.outboundGateway(
Tcp.netClient("localhost", 1234)
.serializer(codec()) // default is CRLF
.deserializer(codec()))) // default is CRLF
.transform(Transformers.objectToString()) // byte[] -> String
.get();
}
@Bean
public AbstractByteArraySerializer codec() {
return TcpCodecs.lf();
}
@Bean
@DependsOn("client")
ApplicationRunner runner(MyGateway gateway) {
return args -> {
System.out.println(gateway.exchange("foo"));
System.out.println(gateway.exchange("bar"));
};
}
public interface MyGateway {
String exchange(String out);
}
}
результат
FOO
BAR