728x90
반응형
1. 여러 개의 @Bean으로 구성된 AbstractServerConnectionFactory 생성
- 각 TCP 서버에 대한 AbstractServerConnectionFactory 빈을 생성합니다. 각 빈은 해당 서버의 연결 구성을 담당합니다.
- AbstractServerConnectionFactory 빈을 생성할 때 서버의 포트, 소켓 팩토리, 시리얼라이저 등을 설정합니다.
@Bean
public AbstractServerConnectionFactory server1ConnectionFactory(Server1Serializer serializer) {
TcpNetServerConnectionFactory connectionFactory = new TcpNetServerConnectionFactory(8084);
connectionFactory.setSerializer(serializer);
connectionFactory.setDeserializer(serializer);
return connectionFactory;
}
@Bean
public AbstractServerConnectionFactory server2ConnectionFactory(Server2Serializer serializer) {
TcpNioServerConnectionFactory connectionFactory = new TcpNioServerConnectionFactory(8083);
connectionFactory.setSerializer(serializer);
connectionFactory.setDeserializer(serializer);
connectionFactory.setSingleUse(true);
return connectionFactory;
}
2. TcpInboundGateway 사용
- 각 AbstractServerConnectionFactory에 대한 TcpInboundGateway를 생성합니다.
- 각각의 AbstractServerConnectionFactory 를 사용하여 서버와의 연결을 설정합니다.
@Bean
public TcpInboundGateway server1InboundGateway(@Qualifier("server1ConnectionFactory") AbstractServerConnectionFactory connectionFactory, @Qualifier("server1InboundChannel") MessageChannel inboundChannel) {
TcpInboundGateway tcpInboundGateway = new TcpInboundGateway();
tcpInboundGateway.setConnectionFactory(connectionFactory);
tcpInboundGateway.setRequestChannel(inboundChannel);
return tcpInboundGateway;
}
@Bean
public TcpInboundGateway server2InboundGateway(@Qualifier("server2ConnectionFactory") AbstractServerConnectionFactory connectionFactory, @Qualifier("server2InboundChannel") MessageChannel inboundChannel) {
TcpInboundGateway tcpInboundGateway = new TcpInboundGateway();
tcpInboundGateway.setConnectionFactory(connectionFactory);
tcpInboundGateway.setRequestChannel(inboundChannel);
return tcpInboundGateway;
}
3. 메시지 채널 구성
- 각 서버에 대한 입력 채널을 생성합니다.
@Bean
public MessageChannel server1InboundChannel() {
return new DirectChannel();
}
@Bean
public MessageChannel server2InboundChannel() {
return new DirectChannel();
}
4. MessageEndPoint 구성
- 각 채널에 대한 처리로직을 연결합니다.
@MessageEndpoint
public class TcpServerEndpoint {
private final MessageService messageService;
public TcpServerEndpoint(MessageService messageService) {
this.messageService = messageService;
}
@ServiceActivator(inputChannel = "server1InboundChannel")
public void Process1(byte[] message) {
messageService.processMessage1(message);
}
@ServiceActivator(inputChannel = "server2InboundChannel")
public void process2(byte[] message) {
messageService.processMessage2(message);
}
}
이러한 설정을 통해 각각의 TCP 서버가 다른 채널을 통해 메시지를 수신하고 처리할 수 있습니다. 위의 코드에서는 TcpInboundGateway를 사용했지만, TcpReceivingChannelAdapter를 사용하여 서버로부터 비동기적으로 메시지를 수신하는 방법도 있습니다. 설정에 따라 필요에 맞게 선택할 수 있습니다.
728x90
반응형
'개발 > spring, spring boot' 카테고리의 다른 글
[Spring Integration][Spring Boot Test] Socket 통신 테스트 시 빈 데이터 전송 이슈 (0) | 2024.02.02 |
---|---|
[Spring Integration] Multi TCP server 테스트 시 Address already in use: bind 에러 (0) | 2024.01.31 |
[Spring Integration] TcpNioServerConnectionFactory vs TcpNetServerConnectionFactory (0) | 2024.01.31 |
[WebSocket][STOMP] Whoops! Lost connection to ws 에러 해결 (0) | 2024.01.30 |
Spring Boot Cache 사용 방법 (0) | 2024.01.28 |