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