diff --git a/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java b/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java index 62a9768746..5bbd7b4bc9 100644 --- a/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java +++ b/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java @@ -13,19 +13,21 @@ package io.dapr.examples.tracing; -import io.dapr.client.DaprClient; -import io.dapr.client.DaprClientBuilder; -import io.dapr.client.domain.HttpExtension; -import io.dapr.client.domain.InvokeMethodRequest; +import io.dapr.config.Properties; import io.dapr.examples.OpenTelemetryConfig; -import io.dapr.utils.TypeRef; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.context.propagation.TextMapSetter; import io.opentelemetry.sdk.OpenTelemetrySdk; -import static io.dapr.examples.OpenTelemetryConfig.getReactorContext; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; /** * 1. Build and install jars: @@ -52,30 +54,50 @@ public static void main(String[] args) throws Exception { Tracer tracer = openTelemetrySdk.getTracer(InvokeClient.class.getCanonicalName()); Span span = tracer.spanBuilder("Example's Main").setSpanKind(SpanKind.CLIENT).startSpan(); - try (DaprClient client = (new DaprClientBuilder()).build()) { - for (String message : args) { - try (Scope scope = span.makeCurrent()) { - InvokeMethodRequest request = new InvokeMethodRequest(SERVICE_APP_ID, "proxy_echo") - .setBody(message) - .setHttpExtension(HttpExtension.POST); - client.invokeMethod(request, TypeRef.get(byte[].class)) - .map(r -> { - System.out.println(new String(r)); - return r; - }) - .flatMap(r -> { - InvokeMethodRequest sleepRequest = new InvokeMethodRequest(SERVICE_APP_ID, "proxy_sleep") - .setHttpExtension(HttpExtension.POST); - return client.invokeMethod(sleepRequest, TypeRef.get(Void.class)); - }).contextWrite(getReactorContext()).block(); - } + int port = Properties.HTTP_PORT.get(); + String baseUrl = "http://localhost:" + port + "/v1.0/invoke/" + SERVICE_APP_ID + "/method/"; + + HttpClient httpClient = HttpClient.newHttpClient(); + + for (String message : args) { + try (Scope scope = span.makeCurrent()) { + // Call proxy_echo + HttpRequest.Builder echoBuilder = HttpRequest.newBuilder() + .uri(URI.create(baseUrl + "proxy_echo")) + .POST(HttpRequest.BodyPublishers.ofString(message)); + injectTraceContext(echoBuilder); + addDaprApiToken(echoBuilder); + HttpResponse echoResponse = + httpClient.send(echoBuilder.build(), HttpResponse.BodyHandlers.ofByteArray()); + System.out.println(new String(echoResponse.body())); + + // Call proxy_sleep + HttpRequest.Builder sleepBuilder = HttpRequest.newBuilder() + .uri(URI.create(baseUrl + "proxy_sleep")) + .POST(HttpRequest.BodyPublishers.noBody()); + injectTraceContext(sleepBuilder); + addDaprApiToken(sleepBuilder); + httpClient.send(sleepBuilder.build(), HttpResponse.BodyHandlers.discarding()); } + } + + span.end(); + openTelemetrySdk.getSdkTracerProvider().shutdown(); + Validation.validate(); + System.out.println("Done"); + System.exit(0); + } + + private static void injectTraceContext(HttpRequest.Builder builder) { + TextMapSetter setter = HttpRequest.Builder::header; + GlobalOpenTelemetry.getPropagators().getTextMapPropagator() + .inject(Context.current(), builder, setter); + } - span.end(); - openTelemetrySdk.getSdkTracerProvider().shutdown(); - Validation.validate(); - System.out.println("Done"); - System.exit(0); + private static void addDaprApiToken(HttpRequest.Builder builder) { + String token = Properties.API_TOKEN.get(); + if (token != null) { + builder.header("dapr-api-token", token); } } } diff --git a/examples/src/main/java/io/dapr/examples/tracing/TracingDemoMiddleServiceController.java b/examples/src/main/java/io/dapr/examples/tracing/TracingDemoMiddleServiceController.java index 323d4c0232..134deda33c 100644 --- a/examples/src/main/java/io/dapr/examples/tracing/TracingDemoMiddleServiceController.java +++ b/examples/src/main/java/io/dapr/examples/tracing/TracingDemoMiddleServiceController.java @@ -13,20 +13,21 @@ package io.dapr.examples.tracing; -import io.dapr.client.DaprClient; -import io.dapr.client.domain.HttpExtension; -import io.dapr.client.domain.InvokeMethodRequest; +import io.dapr.config.Properties; import io.dapr.examples.OpenTelemetryInterceptor; -import io.dapr.utils.TypeRef; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; -import org.springframework.beans.factory.annotation.Autowired; +import io.opentelemetry.context.propagation.TextMapSetter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestAttribute; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; -import static io.dapr.examples.OpenTelemetryConfig.getReactorContext; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; /** * SpringBoot Controller to handle service invocation. @@ -38,11 +39,7 @@ public class TracingDemoMiddleServiceController { private static final String INVOKE_APP_ID = "tracingdemo"; - /** - * Dapr client. - */ - @Autowired - private DaprClient client; + private static final HttpClient httpClient = HttpClient.newHttpClient(); /** * Handles the 'echo' method invocation, by proxying a call into another service. @@ -55,10 +52,14 @@ public class TracingDemoMiddleServiceController { public Mono echo( @RequestAttribute(name = "opentelemetry-context") Context context, @RequestBody(required = false) String body) { - InvokeMethodRequest request = new InvokeMethodRequest(INVOKE_APP_ID, "echo") - .setBody(body) - .setHttpExtension(HttpExtension.POST); - return client.invokeMethod(request, TypeRef.get(byte[].class)).contextWrite(getReactorContext(context)); + return Mono.fromFuture(() -> { + HttpRequest.Builder builder = HttpRequest.newBuilder() + .uri(URI.create(buildInvokeUrl("echo"))) + .POST(HttpRequest.BodyPublishers.ofString(body != null ? body : "")); + injectTraceContext(builder, context); + addDaprApiToken(builder); + return httpClient.sendAsync(builder.build(), HttpResponse.BodyHandlers.ofByteArray()); + }).map(HttpResponse::body); } /** @@ -69,9 +70,32 @@ public Mono echo( */ @PostMapping(path = "/proxy_sleep") public Mono sleep(@RequestAttribute(name = "opentelemetry-context") Context context) { - InvokeMethodRequest request = new InvokeMethodRequest(INVOKE_APP_ID, "sleep") - .setHttpExtension(HttpExtension.POST); - return client.invokeMethod(request, TypeRef.get(byte[].class)).contextWrite(getReactorContext(context)).then(); + return Mono.fromFuture(() -> { + HttpRequest.Builder builder = HttpRequest.newBuilder() + .uri(URI.create(buildInvokeUrl("sleep"))) + .POST(HttpRequest.BodyPublishers.noBody()); + injectTraceContext(builder, context); + addDaprApiToken(builder); + return httpClient.sendAsync(builder.build(), HttpResponse.BodyHandlers.discarding()); + }).then(); + } + + private static String buildInvokeUrl(String method) { + int port = Properties.HTTP_PORT.get(); + return "http://localhost:" + port + "/v1.0/invoke/" + INVOKE_APP_ID + "/method/" + method; + } + + private static void injectTraceContext(HttpRequest.Builder builder, Context context) { + TextMapSetter setter = HttpRequest.Builder::header; + GlobalOpenTelemetry.getPropagators().getTextMapPropagator() + .inject(context, builder, setter); + } + + private static void addDaprApiToken(HttpRequest.Builder builder) { + String token = Properties.API_TOKEN.get(); + if (token != null) { + builder.header("dapr-api-token", token); + } } } diff --git a/sdk-tests/src/test/java/io/dapr/it/methodinvoke/http/MethodInvokeIT.java b/sdk-tests/src/test/java/io/dapr/it/methodinvoke/http/MethodInvokeIT.java index 9d9ac02f8b..3c1ee01b51 100644 --- a/sdk-tests/src/test/java/io/dapr/it/methodinvoke/http/MethodInvokeIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/methodinvoke/http/MethodInvokeIT.java @@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +@SuppressWarnings("deprecation") public class MethodInvokeIT extends BaseIT { //Number of messages to be sent: 10 diff --git a/sdk-tests/src/test/java/io/dapr/it/tracing/grpc/TracingIT.java b/sdk-tests/src/test/java/io/dapr/it/tracing/grpc/TracingIT.java index 2563473981..43f982eed4 100644 --- a/sdk-tests/src/test/java/io/dapr/it/tracing/grpc/TracingIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/tracing/grpc/TracingIT.java @@ -21,6 +21,7 @@ import static io.dapr.it.tracing.OpenTelemetry.createOpenTelemetry; import static io.dapr.it.tracing.OpenTelemetry.getReactorContext; +@SuppressWarnings("deprecation") public class TracingIT extends BaseIT { /** diff --git a/sdk-tests/src/test/java/io/dapr/it/tracing/http/TracingIT.java b/sdk-tests/src/test/java/io/dapr/it/tracing/http/TracingIT.java index 3285d2ca84..b133ce7213 100644 --- a/sdk-tests/src/test/java/io/dapr/it/tracing/http/TracingIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/tracing/http/TracingIT.java @@ -19,6 +19,7 @@ import static io.dapr.it.tracing.OpenTelemetry.createOpenTelemetry; import static io.dapr.it.tracing.OpenTelemetry.getReactorContext; +@SuppressWarnings("deprecation") public class TracingIT extends BaseIT { /** diff --git a/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java b/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java index c9c4bf8ca4..52e1fb069d 100644 --- a/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java +++ b/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java @@ -116,6 +116,7 @@ public Mono publishEvent(String pubsubName, String topicName, Object data, * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod( String appId, String methodName, @@ -136,6 +137,7 @@ public Mono invokeMethod( * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod( String appId, String methodName, @@ -150,6 +152,7 @@ public Mono invokeMethod( * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod( String appId, String methodName, HttpExtension httpExtension, Map metadata, TypeRef type) { return this.invokeMethod(appId, methodName, null, httpExtension, metadata, type); @@ -159,6 +162,7 @@ public Mono invokeMethod( * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod( String appId, String methodName, HttpExtension httpExtension, Map metadata, Class clazz) { return this.invokeMethod(appId, methodName, null, httpExtension, metadata, TypeRef.get(clazz)); @@ -168,6 +172,7 @@ public Mono invokeMethod( * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, TypeRef type) { return this.invokeMethod(appId, methodName, request, httpExtension, null, type); @@ -177,6 +182,7 @@ public Mono invokeMethod(String appId, String methodName, Object request, * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, Class clazz) { return this.invokeMethod(appId, methodName, request, httpExtension, null, TypeRef.get(clazz)); @@ -186,6 +192,7 @@ public Mono invokeMethod(String appId, String methodName, Object request, * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension) { return this.invokeMethod(appId, methodName, request, httpExtension, null, TypeRef.BYTE_ARRAY).then(); } @@ -194,6 +201,7 @@ public Mono invokeMethod(String appId, String methodName, Object request, * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod( String appId, String methodName, Object request, HttpExtension httpExtension, Map metadata) { return this.invokeMethod(appId, methodName, request, httpExtension, metadata, TypeRef.BYTE_ARRAY).then(); @@ -203,6 +211,7 @@ public Mono invokeMethod( * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod( String appId, String methodName, HttpExtension httpExtension, Map metadata) { return this.invokeMethod(appId, methodName, null, httpExtension, metadata, TypeRef.BYTE_ARRAY).then(); @@ -212,6 +221,7 @@ public Mono invokeMethod( * {@inheritDoc} */ @Override + @Deprecated public Mono invokeMethod( String appId, String methodName, byte[] request, HttpExtension httpExtension, Map metadata) { return this.invokeMethod(appId, methodName, request, httpExtension, metadata, TypeRef.BYTE_ARRAY); diff --git a/sdk/src/main/java/io/dapr/client/DaprClient.java b/sdk/src/main/java/io/dapr/client/DaprClient.java index ddf89f587f..00acb18971 100644 --- a/sdk/src/main/java/io/dapr/client/DaprClient.java +++ b/sdk/src/main/java/io/dapr/client/DaprClient.java @@ -178,7 +178,10 @@ Mono> publishEvents(String pubsubName, String topicNa * @param type The Type needed as return for the call. * @param The Type of the return, use byte[] to skip serialization. * @return A Mono Plan of type T. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, Object data, HttpExtension httpExtension, Map metadata, TypeRef type); @@ -194,7 +197,10 @@ Mono invokeMethod(String appId, String methodName, Object data, HttpExten * @param clazz The type needed as return for the call. * @param The Type of the return, use byte[] to skip serialization. * @return A Mono Plan of type T. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, Map metadata, Class clazz); @@ -209,7 +215,10 @@ Mono invokeMethod(String appId, String methodName, Object request, HttpEx * @param type The Type needed as return for the call. * @param The Type of the return, use byte[] to skip serialization. * @return A Mono Plan of type T. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, TypeRef type); @@ -224,7 +233,10 @@ Mono invokeMethod(String appId, String methodName, Object request, HttpEx * @param clazz The type needed as return for the call. * @param The Type of the return, use byte[] to skip serialization. * @return A Mono Plan of type T. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, Class clazz); @@ -239,7 +251,10 @@ Mono invokeMethod(String appId, String methodName, Object request, HttpEx * @param type The Type needed as return for the call. * @param The Type of the return, use byte[] to skip serialization. * @return A Mono Plan of type T. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, HttpExtension httpExtension, Map metadata, TypeRef type); @@ -254,7 +269,10 @@ Mono invokeMethod(String appId, String methodName, HttpExtension httpExte * @param clazz The type needed as return for the call. * @param The Type of the return, use byte[] to skip serialization. * @return A Mono Plan of type T. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, HttpExtension httpExtension, Map metadata, Class clazz); @@ -268,7 +286,10 @@ Mono invokeMethod(String appId, String methodName, HttpExtension httpExte * HTTP, {@link HttpExtension#NONE} otherwise. * @param metadata Metadata (in GRPC) or headers (in HTTP) to be sent in request. * @return A Mono Plan of type Void. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension, Map metadata); @@ -281,7 +302,10 @@ Mono invokeMethod(String appId, String methodName, Object request, HttpExt * @param httpExtension Additional fields that are needed if the receiving app is listening on * HTTP, {@link HttpExtension#NONE} otherwise. * @return A Mono Plan of type Void. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, Object request, HttpExtension httpExtension); /** @@ -293,7 +317,10 @@ Mono invokeMethod(String appId, String methodName, Object request, HttpExt * HTTP, {@link HttpExtension#NONE} otherwise. * @param metadata Metadata (in GRPC) or headers (in HTTP) to be sent in request. * @return A Mono Plan of type Void. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, HttpExtension httpExtension, Map metadata); /** @@ -306,7 +333,10 @@ Mono invokeMethod(String appId, String methodName, Object request, HttpExt * HTTP, {@link HttpExtension#NONE} otherwise. * @param metadata Metadata (in GRPC) or headers (in HTTP) to be sent in request. * @return A Mono Plan of type byte[]. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(String appId, String methodName, byte[] request, HttpExtension httpExtension, Map metadata); @@ -317,7 +347,10 @@ Mono invokeMethod(String appId, String methodName, byte[] request, HttpE * @param type The Type needed as return for the call. * @param The Type of the return, use byte[] to skip serialization. * @return A Mono Plan of type T. + * + * @deprecated It is recommended to use language-native HTTP clients or gRPC clients for service invocation instead. */ + @Deprecated Mono invokeMethod(InvokeMethodRequest invokeMethodRequest, TypeRef type); /** diff --git a/sdk/src/main/java/io/dapr/client/DaprClientImpl.java b/sdk/src/main/java/io/dapr/client/DaprClientImpl.java index 60c7568377..e5c95ec0d7 100644 --- a/sdk/src/main/java/io/dapr/client/DaprClientImpl.java +++ b/sdk/src/main/java/io/dapr/client/DaprClientImpl.java @@ -128,6 +128,7 @@ import reactor.util.retry.Retry; import javax.annotation.Nonnull; + import java.io.IOException; import java.time.Duration; import java.time.Instant; @@ -606,6 +607,7 @@ private Subscription buildSubscription( } @Override + @Deprecated public Mono invokeMethod(InvokeMethodRequest invokeMethodRequest, TypeRef type) { try { final String appId = invokeMethodRequest.getAppId(); diff --git a/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java b/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java index ca3c1c5341..af6791d7e1 100644 --- a/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprClientHttpTest.java @@ -54,6 +54,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@SuppressWarnings("deprecation") public class DaprClientHttpTest { private final String EXPECTED_RESULT = diff --git a/sdk/src/test/java/io/dapr/runtime/DaprRuntimeTest.java b/sdk/src/test/java/io/dapr/runtime/DaprRuntimeTest.java index 2343ca0591..7e2faafd09 100644 --- a/sdk/src/test/java/io/dapr/runtime/DaprRuntimeTest.java +++ b/sdk/src/test/java/io/dapr/runtime/DaprRuntimeTest.java @@ -44,6 +44,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +@SuppressWarnings("deprecation") public class DaprRuntimeTest { protected static final JsonFactory JSON_FACTORY = new JsonFactory();