Конфигурация сервера TcpInboundGateway - по тайм-ауту настраиваемое сообщение для отправки - PullRequest
1 голос
/ 11 ноября 2019

Я использую 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?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 ноября 2019

Нет ничего встроенного в структуру, чтобы сделать это;Я открыл выпуск новой функции .

Таймер ответа начинается только тогда, когда поток возвращается к шлюзу;применяется только при асинхронной обработке;вам придется обработать ваш запрос в другой ветке. Но это все равно не поможет, потому что шлюз просто освобождает поток после истечения времени ожидания ответа.

В текущем состоянии вам придется сделать это самостоятельно в вашем сервисе.

  • enqueueработать с исполнителем задачи и ждать ответа
  • , если ответ не получен, вернуть условие ошибки

ПРИМЕЧАНИЕ После ответа на шлюз вы можетене тогда отправьте реальный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...