Я использую Spring Integration с Spring Boot. У меня есть TCP-сервер с настройкой TcpInboundGateway и Transformer, который содержит бизнес-логику и возвращает строку после завершения обработки. Эта настройка работает нормально, когда я получаю сообщения через сокет.
@Bean
public TcpInboundGateway paWebserviceInGate() {
TcpInboundGateway inGateway = new TcpInboundGateway();
inGateway.setConnectionFactory(connectionFactory.serverConnectionFactory(port));
inGateway.setRequestChannelName("paWebserviceInputChannel");
inGateway.setReplyTimeout(5000);//To configure the timeout - but it does not work
return inGateway;
}
@Transformer(inputChannel = "paWebserviceInputChannel")
public String consume(byte[] bytes) {
String message = new String(bytes);
return paMessageHandler.processPAIndiators(message);
}
ConnectionFactory.java:
public AbstractServerConnectionFactory serverConnectionFactory(int port) {
final AbstractServerConnectionFactory connectionFactory = new TcpNetServerConnectionFactory(port);
connectionFactory.setSerializer(customDeserializer);
connectionFactory.setDeserializer(customDeserializer);
connectionFactory.setSoKeepAlive(false);
// connectionFactory.setSoTimeout(timeout);
return connectionFactory;
}
Теперь у меня есть требование, чтобы по тайм-ауту, скажем, 5 секунд, янужно отправить заказное сообщение клиенту. Допустим, если служба занимает 10 секунд, мне нужно отправить пользовательское сообщение через 5 секунд, чтобы сообщить клиенту об истечении времени ожидания. (Обратите внимание, у меня нет контроля над клиентом; поэтому я не могу добавить тайм-аут на стороне клиента).
Я использовал setReplyTimeout на TcpInboundGateway;но это не делает тайм-аут после 5 сек.
Я ссылался на этот пост Значение времени ожидания ответа в tcp-inbound-gateway в весенней интеграции .
Этот пост объясняет конфигурацию xml, предложенную Артемом Биланом. Кто-нибудь может помочь с настройкой Java? Я запутался при настройке моего кода выше, чтобы включить тайм-аут. Должен ли я использовать IntegrationFlows?
Заранее спасибо.