@Override public Client createClient(ChannelHandlerContext ctx, ClientConfig config) { ClientState clientState = new ClientState(channelConfig(ctx), config); ClientChannelInitializer clientChannelInit = new ClientChannelInitializer(clientState, () -> new ProxyBackendHandler(ctx), getTracing()); ClientConnectionManager connManager = new ClientConnectionManager(clientState, clientChannelInit); Client client = new Client(clientState, connManager); ctx.channel().closeFuture().addListener(f -> clientPool.release(client)); log.debug("creating client"); return client; }
@Override public Client getClient(ChannelHandlerContext ctx, ClientConfig config) { Client client = getHandlerClient(ctx, config.remote()) .orElseGet(() -> clientPool.acquire(ctx, config, () -> createClient(ctx, config))); updateChannelAttr(ctx, config.remote(), client); return client; } }
public void start(Config config) { ApplicationState appState = new ApplicationState(ApplicationConfig.fromConfig(proxyConfig, config)); Stream<ProxyRouteConfig> proxyRouteConfigs = Arrays.stream(routeConfig.split(",")).map(it -> new ProxyRouteConfig(config.getConfig(it))); ProxyClientFactory clientFactory = new ProxyClientFactory(appState); RouteStates routeStates = new RouteStates(proxyRouteConfigs, appState, clientFactory); application = new ApplicationBootstrap(appState.config()) .addServer( "main", bs -> bs.addToPipeline( new SmartHttpPipeline() { @Override public ChannelHandler getApplicationRouter() { return new PipelineRouter(routeStates.routeMap()) { @Override protected void channelRead0(ChannelHandlerContext ctx, Request msg) { super.channelRead0(ctx, msg); if (msg.endOfMessage()) { requestCount.incrementAndGet(); } } }; } })) .build(); }
EdgeProxyState(EdgeProxyConfig config) { super(config); clientFactory = new ProxyClientFactory(this); routeStates = new RouteStates<ProxyRouteState>( // create an ImmutableMap from ... ImmutableMap.copyOf( config .routeConfigs // iterate over a stream of ProxyRouteConfig .stream() // for each ProxyRouteConfig create a ProxyRouteState .map( (ProxyRouteConfig prConfig) -> ProxyRouteState.create( this, prConfig, new ProxyHandler( clientFactory, prConfig, new SocketAddressHelper()))) // collect the stream of ProxyRouteState into // LinkedHashMap<String, ProxyRouteState> where the // route path is the key and // ProxyRouteState is the value .collect(toLinkedMap(RouteState::path, state -> state)))); }