728x90
반응형
TCP 연결이 끊겼을때 특정 로직을 실행하고 싶으면 아래와 같이 TCP config 파일에 TcpConnectionCloseEvent 이벤트의 리스너를 정의하면 됩니다.
@Bean
fun closed(): ApplicationListener<TcpConnectionCloseEvent> {
return ApplicationListener<TcpConnectionCloseEvent> { e: TcpConnectionCloseEvent ->
logger.info {"Connection closed: ${e.getConnectionId()}"}
}
}
closed 함수는 아래와 같은 일을 합니다.
- 이벤트 리스닝: TCP 연결이 닫힐 때 발생하는 TcpConnectionCloseEvent를 리스닝합니다.
- 로그 기록: logger.info를 사용하여 연결이 닫혔다는 정보를 로그로 남깁니다. e.getConnectionId()는 connectionId를 return 하는데 connectionId는 connection을 구분할수 있는 ID 입니다. TCP server에 client1과 client2가 각각 연결했으면 connectionId는 다른 값입니다.
tcp 통신일 경우 Message header에 connectionId가 자동으로 설정되기 때문에 아래와 같이 @ServiceActivator 에서 Message header에서 ip_connectionId에서 조회할 수도 있습니다.
@ServiceActivator(inputChannel = "inboundChannel")
fun process(message: Message<ByteArray>): ByteArray? {
val connectionId = message.headers["ip_connectionId"] as String
참고자료
https://docs.spring.io/spring-integration/reference/ip/tcp-events.html
728x90
반응형
'개발 > spring, spring boot' 카테고리의 다른 글
[Java] [Gradle] Your build is currently configured to use Java 21 and Gradle 7.6.1. 에러 수정 (0) | 2024.07.17 |
---|---|
Spring Boot 의존성 확인 방법 (0) | 2024.07.02 |
[Spring Integration] [tcp server] 역직렬화 처리 시 주의사항 (0) | 2024.06.17 |
[JPA] MariaDB에서 PK를 날짜+sequence의 nextval의 조합으로 insert하는 방법 (0) | 2024.06.13 |
[WebSocket] [STOMP] client 테스트 방법 (0) | 2024.06.11 |