반응형

일반적으로 경량화 API Gateway 제품들은 단일 포트로 요청을 받아 Gateway 기능을 수행한다. 하지만 일부 제품에서는 다중 포트를 열어 특정 포트마다 특정 엔드포인트로 라우팅하는 기능도 제공한다.

 

Spring Cloude Gateway를 이용하여 API Gateway를 구현할 때 위와 같이 다중 포트를 열 수 있는지 리서치를 해보았다.

 

Spring Cloud Gateway에는 Spring Boot 및 Spring Webflux에서 제공하는 Netty 라이브러리가 반드시 필요하다. 당연하게도 Netty 자체에서는 다중 포트를 열어 각각의 Server 구성이 가능하다.

import reactor.core.publisher.Mono;
import reactor.netty.DisposableServer;
import reactor.netty.http.server.HttpServer;

public class MultiAddressApplication {
	public static void main(String[] args) {
		HttpServer httpServer = HttpServer.create();
		DisposableServer server1 = httpServer
				.host("localhost") 
				.port(8080)        
				.bindNow();

		DisposableServer server2 = httpServer
				.host("0.0.0.0") 
				.port(8081)      
				.bindNow();

		Mono.when(server1.onDispose(), server2.onDispose())
				.block();
	}
}

 

하지만 Spring Cloud Gateway 내부 로직에서 사용하는 Webflux는 단일 포트만으로 처리할 수 있는 것으로 판단된다. 

 

아래는 해당 기능을 요청한 이슈들이지만 결국 block 되었다.

https://github.com/reactor/reactor-netty/issues/67

https://github.com/spring-projects/spring-boot/issues/12035

 

 

 

 

 

 

반응형

'Spring > Spring Cloud' 카테고리의 다른 글

[Spring Cloud Gateway] 라우팅 동적반영(refresh)  (0) 2024.03.17
[Spring Cloud] Gateway + OAuth2 Client  (0) 2022.11.21
Spring Cloud Gateway  (0) 2022.10.24

+ Recent posts