new example

This commit is contained in:
Bruno Borges 2019-11-30 02:01:10 -08:00
parent 77919c8663
commit 3d41d54c73
5 changed files with 133 additions and 7 deletions

View File

@ -82,8 +82,17 @@
<include>${protobuf.input.directory}/dapr</include>
<include>${protobuf.input.directory}/daprclient</include>
</inputDirectories>
<outputDirectory>${project.build.sourceDirectory}</outputDirectory>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}</pluginArtifact>
<outputTargets>
<outputTarget>
<type>java</type>
<outputDirectory>${project.build.sourceDirectory}</outputDirectory>
</outputTarget>
<outputTarget>
<type>grpc-java</type>
<outputDirectory>${project.build.sourceDirectory}</outputDirectory>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}</pluginArtifact>
</outputTarget>
</outputTargets>
</configuration>
</execution>
</executions>

View File

@ -17,12 +17,12 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
/**
* <pre>
* User Code definitions by BRUNO
* User Code definitions
* </pre>
*/
@javax.annotation.Generated(
value = "by gRPC proto compiler (version 1.24.0)",
comments = "Source: daprclient/daprclient.proto")
value = "by gRPC proto compiler (version 1.25.0)",
comments = "Source: daprclient.proto")
public final class DaprClientGrpc {
private DaprClientGrpc() {}

View File

@ -21,8 +21,8 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
* </pre>
*/
@javax.annotation.Generated(
value = "by gRPC proto compiler (version 1.24.0)",
comments = "Source: dapr/dapr.proto")
value = "by gRPC proto compiler (version 1.25.0)",
comments = "Source: dapr.proto")
public final class DaprGrpc {
private DaprGrpc() {}

View File

@ -16,6 +16,11 @@
<name>dapr-client-examples</name>
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20190722</version>
</dependency>
<dependency>
<groupId>io.dapr</groupId>
<artifactId>client</artifactId>

View File

@ -0,0 +1,112 @@
package io.dapr.examples;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpClient.Redirect;
import java.net.http.HttpClient.Version;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.Charset;
import java.time.Duration;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import static java.lang.System.out;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.json.JSONObject;
import com.sun.net.httpserver.HttpServer;
import com.sun.net.httpserver.HttpExchange;
/**
* OrderManager
*/
public class OrderManager {
static HttpClient httpClient;
public static void main(String[] args) throws IOException {
var httpPort = 8080;
var daprPort = Optional.ofNullable(System.getenv("DAPR_HTTP_PORT")).orElse("3500");
var stateUrl = String.format("http://localhost:%s/v1.0/state", daprPort);
var httpServer = HttpServer.create(new InetSocketAddress(httpPort), 0);
httpClient = HttpClient.newBuilder().version(Version.HTTP_1_1).followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(2)).build();
httpServer.createContext("/order").setHandler(e -> {
fetch(stateUrl + "/order").thenAccept(response -> {
var resCode = response.statusCode() == 200 ? 200 : 500;
var body = response.statusCode() == 200 ? response.body() : "Could not get state.";
try {
e.sendResponseHeaders(resCode, body.getBytes().length);
try (var os = e.getResponseBody()) {
os.write(body.getBytes());
}
} catch (IOException ioerror) {
out.println(ioerror);
}
});
});
httpServer.createContext("/neworder").setHandler(e -> {
var json = readBody(e);
var jsonObject = new JSONObject(json);
var orderId = jsonObject.getString("orderId");
out.printf("Got a new order! Order ID: %s", orderId);
var state = new JSONObject();
state.put("key", "order");
state.put("value", jsonObject);
post(stateUrl + "/neworder", state.toString()).thenAccept(response -> {
var resCode = response.statusCode() == 200 ? 200 : 500;
var body = response.statusCode() == 200 ? "" : "Failed to persist state.";
try {
e.sendResponseHeaders(resCode, body.getBytes().length);
try (var os = e.getResponseBody()) {
os.write(body.getBytes());
}
} catch (IOException ioerror) {
out.println(ioerror);
}
});
});
httpServer.start();
out.printf("Java App listening on port %s.", httpPort);
}
private static CompletableFuture<HttpResponse<String>> fetch(String url) {
var request = HttpRequest.newBuilder().uri(URI.create(url)).build();
return httpClient.sendAsync(request, BodyHandlers.ofString());
}
private static CompletableFuture<HttpResponse<String>> post(String url, String body) {
var request = HttpRequest.newBuilder().uri(URI.create(url))
.header("Content-Type", "application/json; charset=UTF-8").POST(BodyPublishers.ofString(body)).build();
return httpClient.sendAsync(request, BodyHandlers.ofString());
}
private static String readBody(HttpExchange t) {
// retrieve the request json data
var is = t.getRequestBody();
var bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
try (bos) {
while ((len = is.read(buffer)) > 0)
bos.write(buffer, 0, len);
} catch (IOException e) {
e.printStackTrace();
}
return new String(bos.toByteArray(), Charset.forName("UTF-8"));
}
}