Я читал еще одну проблему на этом сайте, как это, но я не понимаю, как решить проблему.
Spring Integration: Утечка приложений из потоков SimpleAsyncTaskExecutor?
Моя ошибка похожа на предыдущую ссылку
SimpleAsyncTaskExecutor-2327" - Thread t@2405
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <7a224c1> (a java.util.concurrent.CountDownLatch$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
at org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel.receive(GenericMessagingTemplate.java:199)
at org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel.receive(GenericMessagingTemplate.java:192)
at org.springframework.messaging.core.GenericMessagingTemplate.doReceive(GenericMessagingTemplate.java:130)
at org.springframework.messaging.core.GenericMessagingTemplate.doSendAndReceive(GenericMessagingTemplate.java:157)
at org.springframework.messaging.core.GenericMessagingTemplate.doSendAndReceive(GenericMessagingTemplate.java:45)
at org.springframework.messaging.core.AbstractMessagingTemplate.sendAndReceive(AbstractMessagingTemplate.java:42)
at org.springframework.integration.core.MessagingTemplate.sendAndReceive(MessagingTemplate.java:97)
at org.springframework.integration.core.MessagingTemplate.sendAndReceive(MessagingTemplate.java:38)
at org.springframework.messaging.core.AbstractMessagingTemplate.convertSendAndReceive(AbstractMessagingTemplate.java:79)
at org.springframework.messaging.core.AbstractMessagingTemplate.convertSendAndReceive(AbstractMessagingTemplate.java:70)
at org.springframework.integration.gateway.MessagingGatewaySupport.doSendAndReceive(MessagingGatewaySupport.java:449)
Я использую
- весна-интеграция-ява-DSL-1.2.3.RELEASE
- весна-интегрально-ф-4.3.17.RELEASE
- весна-интеграция-клиент-4.3.17.RELEASE
Мой сценарий следующий: я получаю сообщение через контроллер Api, и это сообщение отправляется через сокет TCP.
Я определил интерфейс MessageGateway
@MessagingGateway(defaultRequestChannel = "toTcp.input")
public interface MessageTcpGateway {
@Gateway
public ListenableFuture<Void> sendTcpChannel(byte[] data,
@Header("connectionId") String connectionId );
}
После того, как я использую этот интерфейс в классе обслуживания, как это:
public void sendMessageTcpGateway(final String bridgeId,final String connectionId, final byte[] message) {
LOGGER.debug("sendMessageTcpGateway connectionId:{} - message:{}", connectionId, message);
if (holder.existsConnection(connectionId)!=null) {
gatewayTcp.sendTcpChannel(message,connectionId);
} else {
LOGGER.error("Not send message connectionId:{} - message:{}", connectionId, message);
}
}
Почему нить ждет? Мой процесс ждет каких-либо признаков, и меня не рассматривают? Я предполагаю, что если соединение недоступно или возникла какая-либо ошибка, Spring-Integration выдаст исключение
Как мне решить эту проблему?