У меня есть рабочий пример TCPSocketClient, использующий Spring Integration с жестко запрограммированным именем хоста и портом.
Как изменить этот пример, чтобы принимать localhost
и порт 5877
для динамической передачи?
т.е. Можно ли вызвать метод обмена как ExchangeService.exchange(hostname, port, request)
вместо ExchangeService.exchange(request)
Если да, то как эти параметры применяются к бину client
?
@Configuration
public class AppConfig {
@Bean
public IntegrationFlow client() {
return IntegrationFlows.from(ApiGateway.class).handle(
Tcp.outboundGateway(
Tcp.netClient("localhost", 5877)
.serializer(codec())
.deserializer(codec())
).remoteTimeout(10000)
)
.transform(Transformers.objectToString())
.get();
}
@Bean
public ByteArrayCrLfSerializer codec() {
ByteArrayCrLfSerializer crLfSerializer = new ByteArrayCrLfSerializer();
crLfSerializer.setMaxMessageSize(204800000);
return crLfSerializer;
}
@Bean
@DependsOn("client")
public ExchangeService exchangeService(ApiGateway apiGateway) {
return new ExchangeServiceImpl(apiGateway);
}
}
public interface ApiGateway {
String exchange(String out);
}
public interface ExchangeService {
public String exchange(String request);
}
@Service
public class ExchangeServiceImpl implements ExchangeService {
private ApiGateway apiGateway;
@Autowired
public ExchangeServiceImpl(ApiGateway apiGateway) {
this.apiGateway=apiGateway;
}
@Override
public String exchange(String request) {
String response = null;
try {
response = apiGateway.exchange(request);
} catch (Exception e) {
throw e;
}
return response;
}
}