use of io.servicecomb.core.Invocation in project java-chassis by ServiceComb.
the class TestConfiguration method testConfiguration.
@Test
public void testConfiguration() {
assertNotNull(Configuration.INSTANCE);
assertEquals("returnnull", Configuration.FALLBACKPOLICY_POLICY_RETURN);
assertEquals("throwexception", Configuration.FALLBACKPOLICY_POLICY_THROW);
Configuration c = Configuration.INSTANCE;
Invocation invocation = Mockito.mock(Invocation.class);
String test2 = invocation.getMicroserviceName();
Mockito.when(invocation.getOperationMeta()).thenReturn(Mockito.mock(OperationMeta.class));
Mockito.when(invocation.getOperationMeta().getMicroserviceName()).thenReturn("testqualify");
int res = c.getIsolationTimeoutInMilliseconds("groupname", test2, "testqualify");
assertEquals(30000, res);
boolean b1 = c.getIsolationTimeoutEnabled("groupname", test2, "testqualify");
assertFalse(b1);
int res1 = c.getIsolationMaxConcurrentRequests("groupname", test2, "testqualify");
assertEquals(10, res1);
boolean b2 = c.isCircuitBreakerEnabled("groupname", test2, "testqualify");
assertTrue(b2);
String str = c.getFallbackPolicyPolicy("groupname", test2, "testqualify");
assertEquals("throwexception", str);
}
use of io.servicecomb.core.Invocation in project java-chassis by ServiceComb.
the class GrpcCodec method decodeRequest.
public static Invocation decodeRequest(RoutingContext routingContext, OperationMeta operationMeta) throws Exception {
OperationProtobuf operationProtobuf = ProtobufManager.getOrCreateOperation(operationMeta);
Buffer bodyBuffer = routingContext.getBody();
Buffer protoBuffer = bodyBuffer.slice(1, bodyBuffer.length());
Object[] args = operationProtobuf.getRequestSchema().readObject(protoBuffer);
Invocation invocation = InvocationFactory.forProvider(grpcTransport.getEndpoint(), operationMeta, args);
String strContext = routingContext.request().getHeader(Const.CSE_CONTEXT);
@SuppressWarnings("unchecked") Map<String, String> context = JsonUtils.readValue(strContext.getBytes(StandardCharsets.UTF_8), Map.class);
invocation.setContext(context);
return invocation;
}
use of io.servicecomb.core.Invocation in project java-chassis by ServiceComb.
the class GrpcServerInvoke method runInExecutor.
public void runInExecutor() {
try {
Invocation invocation = GrpcCodec.decodeRequest(routingContext, operationMeta);
invocation.next(response -> {
onProviderResponse(invocation, response);
});
} catch (Throwable e) {
LOGGER.error("grpc server onrequest error", e);
sendFailResponse(e);
}
}
use of io.servicecomb.core.Invocation in project java-chassis by ServiceComb.
the class GrpcTransport method send.
@Override
public void send(Invocation invocation, AsyncResponse asyncResp) throws Exception {
HttpClientWithContext httpClientWithContext = clientMgr.findThreadBindClientPool();
OperationMeta operationMeta = invocation.getOperationMeta();
OperationProtobuf operationProtobuf = ProtobufManager.getOrCreateOperation(operationMeta);
String cseContext = JsonUtils.writeValueAsString(invocation.getContext());
// 在verticle之外的线程调用
IpPort ipPort = (IpPort) invocation.getEndpoint().getAddress();
Buffer requestBuf = GrpcCodec.encodeRequest(invocation, operationProtobuf);
String url = "/" + invocation.getSchemaId() + "/" + operationMeta.getOperationId();
Handler<HttpClientResponse> responseHandler = httpResponse -> {
httpResponse.bodyHandler(responseBuf -> {
invocation.getResponseExecutor().execute(() -> {
try {
Response response = GrpcCodec.decodeResponse(invocation, operationProtobuf, httpResponse, responseBuf);
ResponseMeta responseMeta = operationMeta.findResponseMeta(response.getStatusCode());
for (String headerName : responseMeta.getHeaders().keySet()) {
for (String value : httpResponse.headers().getAll(headerName)) {
response.getHeaders().addHeader(headerName, value);
}
}
asyncResp.complete(response);
} catch (Exception e) {
asyncResp.fail(invocation.getInvocationType(), e);
}
});
});
};
// 从业务线程转移到网络线程中去发送
httpClientWithContext.runOnContext(httpClient -> {
HttpClientRequest httpClientRequest = httpClient.post(ipPort.getPort(), ipPort.getHostOrIp(), url, responseHandler);
httpClientRequest.exceptionHandler(e -> {
asyncResp.fail(invocation.getInvocationType(), e);
});
httpClientRequest.setTimeout(AbstractTransport.getRequestTimeout());
httpClientRequest.putHeader(HEADER_CONTENT_TYPE, "application/grpc").putHeader(HEADER_TE, "trailers").putHeader(HEADER_USER_AGENT, "cse-client/1.0.0").putHeader(Const.CSE_CONTEXT, cseContext).putHeader(Const.DEST_MICROSERVICE, invocation.getMicroserviceName()).end(requestBuf);
});
}
use of io.servicecomb.core.Invocation in project java-chassis by ServiceComb.
the class TestHighwayCodec method testDecodeRequest.
@Test
public void testDecodeRequest() {
boolean status = true;
try {
commonMock();
Invocation inv = HighwayCodec.decodeRequest(header, operationProtobuf, bodyBuffer);
Assert.assertNotNull(inv);
} catch (Exception e) {
status = false;
}
Assert.assertTrue(status);
}
Aggregations