use of org.apache.servicecomb.foundation.common.net.URIEndpointObject in project incubator-servicecomb-java-chassis by apache.
the class CommonHttpEdgeDispatcher method onRequest.
protected void onRequest(RoutingContext context) {
URLMappedConfigurationItem configurationItem = findConfigurationItem(context.request().uri());
if (configurationItem == null) {
context.next();
return;
}
String uri = Utils.findActualPath(context.request().uri(), configurationItem.getPrefixSegmentCount());
Invocation invocation = new Invocation() {
@Override
public String getConfigTransportName() {
return "rest";
}
@Override
public String getMicroserviceName() {
return configurationItem.getMicroserviceName();
}
};
LoadBalancer loadBalancer = getOrCreateLoadBalancer(invocation, configurationItem.getMicroserviceName(), configurationItem.getVersionRule());
ServiceCombServer server = loadBalancer.chooseServer(invocation);
if (server == null) {
LOG.warn("no available server for service {}", configurationItem.getMicroserviceName());
serverNotReadyResponse(context);
return;
}
URIEndpointObject endpointObject = new URIEndpointObject(server.getEndpoint().getEndpoint());
RequestOptions requestOptions = new RequestOptions();
requestOptions.setHost(endpointObject.getHostOrIp()).setPort(endpointObject.getPort()).setSsl(endpointObject.isSslEnabled()).setMethod(context.request().method()).setURI(uri);
HttpClient httpClient;
if (endpointObject.isHttp2Enabled()) {
httpClient = HttpClients.getClient(Http2TransportHttpClientOptionsSPI.CLIENT_NAME, false).getHttpClient();
} else {
httpClient = HttpClients.getClient(HttpTransportHttpClientOptionsSPI.CLIENT_NAME, false).getHttpClient();
}
context.request().pause();
httpClient.request(requestOptions).compose(httpClientRequest -> {
context.request().headers().forEach((header) -> httpClientRequest.headers().set(header.getKey(), header.getValue()));
context.request().resume();
context.request().handler(httpClientRequest::write);
context.request().endHandler((v) -> httpClientRequest.end());
return httpClientRequest.response().compose(httpClientResponse -> {
context.response().setStatusCode(httpClientResponse.statusCode());
httpClientResponse.headers().forEach((header) -> context.response().headers().set(header.getKey(), header.getValue()));
httpClientResponse.handler(this.responseHandler(context));
httpClientResponse.endHandler((v) -> context.response().end());
return Future.succeededFuture();
});
}).onFailure(failure -> {
LOG.warn("send request to target {}:{} failed, cause {}", endpointObject.getHostOrIp(), endpointObject.getPort(), failure.getMessage());
serverNotReadyResponse(context);
});
}
use of org.apache.servicecomb.foundation.common.net.URIEndpointObject in project incubator-servicecomb-java-chassis by apache.
the class TestTcpServer method testTcpServerSSL.
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testTcpServerSSL(@Mocked Vertx vertx, @Mocked AsyncResultCallback<InetSocketAddress> callback, @Mocked NetServer netServer) {
new Expectations() {
{
vertx.createNetServer((NetServerOptions) any);
result = netServer;
netServer.connectHandler((Handler) any);
netServer.listen(anyInt, anyString, (Handler) any);
}
};
URIEndpointObject endpointObject = new URIEndpointObject("highway://127.0.0.1:6663?sslEnabled=true");
TcpServer server = new TcpServerForTest(endpointObject);
// assert done in Expectations
server.init(vertx, "", callback);
}
use of org.apache.servicecomb.foundation.common.net.URIEndpointObject in project incubator-servicecomb-java-chassis by apache.
the class VertxRestTransport method canInit.
@Override
public boolean canInit() {
setListenAddressWithoutSchema(TransportConfig.getAddress());
URIEndpointObject ep = (URIEndpointObject) getEndpoint().getAddress();
if (ep == null) {
return true;
}
if (!NetUtils.canTcpListen(ep.getSocketAddress().getAddress(), ep.getPort())) {
LOGGER.warn("Can not start VertxRestTransport, the port:{} may have been occupied. You can ignore this message if you are using a web container like tomcat.", ep.getPort());
return false;
}
return true;
}
use of org.apache.servicecomb.foundation.common.net.URIEndpointObject in project incubator-servicecomb-java-chassis by apache.
the class TestRestServerVerticle method testRestServerVerticleWithHttp2.
@Test
public void testRestServerVerticleWithHttp2(@Mocked Transport transport, @Mocked Vertx vertx, @Mocked Context context, @Mocked JsonObject jsonObject, @Mocked Promise<Void> startPromise) {
URIEndpointObject endpointObject = new URIEndpointObject("http://127.0.0.1:8080?protocol=http2");
new Expectations() {
{
transport.parseAddress("http://127.0.0.1:8080?protocol=http2");
result = endpointObject;
}
};
Endpoint endpiont = new Endpoint(transport, "http://127.0.0.1:8080?protocol=http2");
new Expectations() {
{
context.config();
result = jsonObject;
jsonObject.getValue(AbstractTransport.ENDPOINT_KEY);
result = endpiont;
}
};
RestServerVerticle server = new RestServerVerticle();
boolean status = false;
try {
server.init(vertx, context);
server.start(startPromise);
} catch (Exception e) {
status = true;
}
Assertions.assertFalse(status);
}
use of org.apache.servicecomb.foundation.common.net.URIEndpointObject in project incubator-servicecomb-java-chassis by apache.
the class RemoteHostAccessItem method appendClientFormattedItem.
@Override
public void appendClientFormattedItem(InvocationFinishEvent clientLogEvent, StringBuilder builder) {
Endpoint endpoint = clientLogEvent.getInvocation().getEndpoint();
if (null == endpoint || null == endpoint.getAddress() || StringUtils.isEmpty(((URIEndpointObject) endpoint.getAddress()).getHostOrIp())) {
builder.append(EMPTY_RESULT);
return;
}
builder.append(((URIEndpointObject) endpoint.getAddress()).getHostOrIp());
}
Aggregations