From c2b0e03fdb50cdf86657195aad141d84aff29fc4 Mon Sep 17 00:00:00 2001 From: Kevin_T <596823919@qq.com> Date: Thu, 28 Oct 2021 15:43:35 +0800 Subject: [PATCH 1/2] feat: add metric for rpc headers + add more log + update cloud-runtimes-api version to 1.0.4.RELEASE --- .../capa/examples/rpc/DemoRpcClient.java | 2 +- pom.xml | 2 +- .../rxcloud/capa/spi/http/CapaHttpSpi.java | 44 ++++++++++++++- .../capa/spi/http/CapaSerializeHttpSpi.java | 56 +++++++++++++++---- .../rxcloud/capa/rpc/CapaRpcClientHttp.java | 6 +- 5 files changed, 91 insertions(+), 19 deletions(-) diff --git a/examples/src/main/java/group/rxcloud/capa/examples/rpc/DemoRpcClient.java b/examples/src/main/java/group/rxcloud/capa/examples/rpc/DemoRpcClient.java index 92d4131..1b713fa 100644 --- a/examples/src/main/java/group/rxcloud/capa/examples/rpc/DemoRpcClient.java +++ b/examples/src/main/java/group/rxcloud/capa/examples/rpc/DemoRpcClient.java @@ -27,7 +27,7 @@ public class DemoRpcClient { /** * Identifier in Capa for the service this client will invoke. */ - private static final String SERVICE_APP_ID = "test"; + private static final String SERVICE_APP_ID = "12345.helloworld"; public static void main(String[] args) { CapaRpcClient capaRpcClient = new CapaRpcClientBuilder().build(); diff --git a/pom.xml b/pom.xml index b47cef9..b4519a1 100644 --- a/pom.xml +++ b/pom.xml @@ -72,7 +72,7 @@ 8 UTF-8 3.8.1 - 1.0.1.RELEASE + 1.0.4.RELEASE 3.3.11.RELEASE 5.3.1 3.6.0 diff --git a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java index 3175daa..2b815cb 100644 --- a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java +++ b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaHttpSpi.java @@ -22,6 +22,7 @@ import group.rxcloud.capa.spi.config.CapaSpiOptionsLoader; import group.rxcloud.capa.spi.config.CapaSpiProperties; import group.rxcloud.capa.spi.config.RpcServiceOptions; +import group.rxcloud.cloudruntimes.domain.core.invocation.HttpExtension; import group.rxcloud.cloudruntimes.utils.TypeRef; import okhttp3.OkHttpClient; import org.slf4j.Logger; @@ -47,8 +48,8 @@ public CapaHttpSpi(OkHttpClient httpClient, CapaObjectSerializer objectSerialize /** * Templates, delegate to specific http invoker. * - * @param httpMethod Ignore, fix to POST. TODO - * @param urlParameters Ignore, fix to EMPTY. TODO + * @param httpMethod Ignore, fix to POST. FIXME + * @param urlParameters Ignore, fix to EMPTY. FIXME */ @Override protected CompletableFuture> doInvokeApi(String httpMethod, @@ -72,6 +73,22 @@ protected CompletableFuture> doInvokeApi(String httpMethod, logger.debug("[CapaHttpSpi] invoke rpc context[{}]", context); } } + // FIXME Ignore, fix to POST. + if (!HttpExtension.POST.getMethod().toString().equalsIgnoreCase(httpMethod)) { + if (logger.isWarnEnabled()) { + logger.warn("[CapaHttpSpi] invoke rpc httpMethod[{}] only support POST now.", + httpMethod); + } + httpMethod = HttpExtension.POST.getMethod().toString(); + } + // FIXME Ignore, fix to EMPTY. + if (urlParameters != null && !urlParameters.isEmpty()) { + if (logger.isWarnEnabled()) { + logger.warn("[CapaHttpSpi] invoke rpc urlParameters[{}] not supported now.", + urlParameters); + } + urlParameters = null; + } // parse url path segments Objects.requireNonNull(pathSegments, "pathSegments"); @@ -96,6 +113,29 @@ protected CompletableFuture> doInvokeApi(String httpMethod, // spi invoke CompletableFuture> invokeSpiApi = invokeSpiApi(appId, method, requestData, headers, type, rpcServiceOptions); + invokeSpiApi.whenComplete((tHttpResponse, throwable) -> { + if (throwable != null) { + if (logger.isWarnEnabled()) { + logger.warn("[CapaHttpSpi] invoke rpc response error", + throwable); + } + return; + } + if (tHttpResponse == null) { + if (logger.isWarnEnabled()) { + logger.warn("[CapaHttpSpi] invoke rpc response empty[{}]", + tHttpResponse); + } + return; + } + final int responseStatusCode = tHttpResponse.getStatusCode(); + final Map responseHeaders = tHttpResponse.getHeaders(); + final T responseBody = tHttpResponse.getBody(); + if (logger.isDebugEnabled()) { + logger.debug("[CapaHttpSpi] invoke rpc response code[{}] headers[{}] body[{}]", + responseStatusCode, responseHeaders, responseBody); + } + }); return invokeSpiApi; } diff --git a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpi.java b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpi.java index 9b944ad..1a92894 100644 --- a/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpi.java +++ b/sdk-spi/src/main/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpi.java @@ -24,11 +24,12 @@ import group.rxcloud.cloudruntimes.domain.core.invocation.Metadata; import group.rxcloud.cloudruntimes.utils.TypeRef; import okhttp3.Call; -import okhttp3.OkHttpClient; import okhttp3.Callback; +import okhttp3.Headers; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; -import okhttp3.MediaType; import okhttp3.Response; import okhttp3.ResponseBody; import org.slf4j.Logger; @@ -42,7 +43,7 @@ import java.util.concurrent.CompletableFuture; /** - * The type Capa serialize http spi. + * The Capa http spi with default serializer process. */ public abstract class CapaSerializeHttpSpi extends CapaHttpSpi { @@ -68,9 +69,17 @@ protected byte[] getRequestWithSerialize(Object requestData) { try { return objectSerializer.serialize(requestData); } catch (IOException e) { + if (logger.isWarnEnabled()) { + logger.warn("[CapaSerializeHttpSpi] serialize rpc request[{}] io error", + requestData, e); + } throw new CapaException(CapaErrorContext.PARAMETER_RPC_REQUEST_SERIALIZE_ERROR, "Request Type: " + requestData.getClass().getName()); } catch (Exception e) { + if (logger.isWarnEnabled()) { + logger.warn("[CapaSerializeHttpSpi] serialize rpc request[{}] error", + requestData, e); + } throw new CapaException(CapaErrorContext.PARAMETER_RPC_REQUEST_SERIALIZE_ERROR, "Request Type: " + requestData.getClass().getName(), e); } @@ -84,7 +93,6 @@ protected byte[] getRequestWithSerialize(Object requestData) { * @return the request body with byte[] serialize */ protected RequestBody getRequestBodyWithSerialize(Object requestData, Map headers) { - byte[] serializedRequestBody = getRequestWithSerialize(requestData); final String contentType = headers != null ? headers.get(Metadata.CONTENT_TYPE) : null; @@ -97,11 +105,27 @@ protected RequestBody getRequestBodyWithSerialize(Object requestData, Map headersParams) { + okhttp3.Headers.Builder headersBuilder = new okhttp3.Headers.Builder(); + if (headersParams == null || headersParams.size() == 0) { + return headersBuilder.build(); + } + headersParams.forEach(headersBuilder::add); + return headersBuilder.build(); + } + /** * Http async call */ @@ -130,21 +154,23 @@ protected CompletableFuture> doAsyncInvoke0(Request request, * @return the response body with byte[] deserialize */ protected HttpResponse getResponseBodyWithDeserialize(TypeRef type, HttpResponse httpResponse) { + final int httpResponseStatusCode = httpResponse.getStatusCode(); + final Map httpResponseHeaders = httpResponse.getHeaders(); final byte[] httpResponseBody = httpResponse.getBody(); try { T responseObject = objectSerializer.deserialize(httpResponseBody, type); - return new HttpResponse<>(responseObject, httpResponse.getHeaders(), httpResponse.getStatusCode()); + return new HttpResponse<>(responseObject, httpResponseHeaders, httpResponseStatusCode); } catch (IOException e) { if (logger.isWarnEnabled()) { - logger.warn("[CapaSerializeHttpSpi] deserialize rpc response[{}] type[{}] io error", - httpResponseBody, type, e); + logger.warn("[CapaSerializeHttpSpi] deserialize rpc statusCode[{}] headers[{}] response[{}] type[{}] io error", + httpResponseStatusCode, httpResponseHeaders, httpResponseBody, type, e); } throw new CapaException(CapaErrorContext.PARAMETER_RPC_RESPONSE_DESERIALIZE_ERROR, "Response Type: " + type, e); } catch (Exception e) { if (logger.isWarnEnabled()) { - logger.warn("[CapaSerializeHttpSpi] deserialize rpc response[{}] type[{}] error", - httpResponseBody, type, e); + logger.warn("[CapaSerializeHttpSpi] deserialize rpc statusCode[{}] headers[{}] response[{}] type[{}] error", + httpResponseStatusCode, httpResponseHeaders, httpResponseBody, type, e); } throw new CapaException(CapaErrorContext.PARAMETER_RPC_RESPONSE_DESERIALIZE_ERROR, "Response Type: " + type, e); @@ -190,9 +216,15 @@ public void onResponse(Call call, Response response) throws IOException { return; } - Map mapHeaders = new HashMap<>(); - // response.headers() - // .forEach(pair -> mapHeaders.put(pair.getFirst(), pair.getSecond())); + Map mapHeaders; + Headers responseHeaders = response.headers(); + if (responseHeaders == null || responseHeaders.size() == 0) { + mapHeaders = new HashMap<>(2, 1); + } else { + mapHeaders = new HashMap<>(responseHeaders.size() << 1); + responseHeaders.forEach(pair -> mapHeaders.put(pair.getFirst(), pair.getSecond())); + } + HttpResponse httpResponse = new HttpResponse<>(bodyBytes, mapHeaders, response.code()); future.complete(httpResponse); } diff --git a/sdk/src/main/java/group/rxcloud/capa/rpc/CapaRpcClientHttp.java b/sdk/src/main/java/group/rxcloud/capa/rpc/CapaRpcClientHttp.java index f7b85a5..6c7ebe8 100644 --- a/sdk/src/main/java/group/rxcloud/capa/rpc/CapaRpcClientHttp.java +++ b/sdk/src/main/java/group/rxcloud/capa/rpc/CapaRpcClientHttp.java @@ -89,9 +89,9 @@ public Mono invokeMethod(InvokeMethodRequest invokeMethodRequest, TypeRef context, type)) .flatMap(httpResponse -> { - T object = httpResponse.getBody(); - if (object != null) { - return Mono.just(object); + final T responseBody = httpResponse.getBody(); + if (responseBody != null) { + return Mono.just(responseBody); } return Mono.empty(); }); From 8f2fe7ef4973b5b2840e95b0236e2d6869ceb437 Mon Sep 17 00:00:00 2001 From: kevinten10 <596823919@qq.com> Date: Fri, 29 Oct 2021 00:07:18 +0800 Subject: [PATCH 2/2] release: release 1.0.4.RELEASE version --- examples/pom.xml | 2 +- pom.xml | 2 +- sdk-component/pom.xml | 2 +- sdk-infrastructure/pom.xml | 2 +- sdk-spi-demo/pom.xml | 2 +- sdk-spi/pom.xml | 2 +- sdk/pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index 3226974..8fe886e 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.0.4-SNAPSHOT + 1.0.4.RELEASE capa-examples diff --git a/pom.xml b/pom.xml index 93baf3c..3fdfbad 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ group.rxcloud capa-parent pom - 1.0.4-SNAPSHOT + 1.0.4.RELEASE capa-sdk-parent SDK for Capa. https://github.com/reactivegroup diff --git a/sdk-component/pom.xml b/sdk-component/pom.xml index 32a9a14..d78462b 100644 --- a/sdk-component/pom.xml +++ b/sdk-component/pom.xml @@ -23,7 +23,7 @@ group.rxcloud capa-parent - 1.0.4-SNAPSHOT + 1.0.4.RELEASE capa-sdk-component diff --git a/sdk-infrastructure/pom.xml b/sdk-infrastructure/pom.xml index 7c55819..764e22a 100644 --- a/sdk-infrastructure/pom.xml +++ b/sdk-infrastructure/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.0.4-SNAPSHOT + 1.0.4.RELEASE capa-sdk-infrastructure diff --git a/sdk-spi-demo/pom.xml b/sdk-spi-demo/pom.xml index 0b39e1b..c772e6f 100644 --- a/sdk-spi-demo/pom.xml +++ b/sdk-spi-demo/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.0.4-SNAPSHOT + 1.0.4.RELEASE capa-sdk-spi-demo diff --git a/sdk-spi/pom.xml b/sdk-spi/pom.xml index 8a952a5..c47e783 100644 --- a/sdk-spi/pom.xml +++ b/sdk-spi/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.0.4-SNAPSHOT + 1.0.4.RELEASE capa-sdk-spi diff --git a/sdk/pom.xml b/sdk/pom.xml index abf2a98..59578a4 100644 --- a/sdk/pom.xml +++ b/sdk/pom.xml @@ -23,7 +23,7 @@ group.rxcloud capa-parent - 1.0.4-SNAPSHOT + 1.0.4.RELEASE capa-sdk