mirror of https://github.com/grpc/grpc-java.git
Add an example compressing client
This commit is contained in:
parent
3cf76326a2
commit
091749e4ca
|
|
@ -51,11 +51,19 @@ task helloWorldClient(type: CreateStartScripts) {
|
||||||
classpath = jar.outputs.files + project.configurations.runtime
|
classpath = jar.outputs.files + project.configurations.runtime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task compressingHelloWorldClient(type: CreateStartScripts) {
|
||||||
|
mainClassName = "io.grpc.examples.experimental.CompressingHelloWorldClient"
|
||||||
|
applicationName = "compressing-hello-world-client"
|
||||||
|
outputDir = new File(project.buildDir, 'tmp')
|
||||||
|
classpath = jar.outputs.files + project.configurations.runtime
|
||||||
|
}
|
||||||
|
|
||||||
applicationDistribution.into("bin") {
|
applicationDistribution.into("bin") {
|
||||||
from(routeGuideServer)
|
from(routeGuideServer)
|
||||||
from(routeGuideClient)
|
from(routeGuideClient)
|
||||||
from(helloWorldServer)
|
from(helloWorldServer)
|
||||||
from(helloWorldClient)
|
from(helloWorldClient)
|
||||||
|
from(compressingHelloWorldClient)
|
||||||
fileMode = 0755
|
fileMode = 0755
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2015, Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above
|
||||||
|
* copyright notice, this list of conditions and the following disclaimer
|
||||||
|
* in the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of Google Inc. nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from
|
||||||
|
* this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.grpc.examples.experimental;
|
||||||
|
|
||||||
|
import io.grpc.CallOptions;
|
||||||
|
import io.grpc.Channel;
|
||||||
|
import io.grpc.ClientCall;
|
||||||
|
import io.grpc.ClientInterceptor;
|
||||||
|
import io.grpc.Codec;
|
||||||
|
import io.grpc.ManagedChannel;
|
||||||
|
import io.grpc.MethodDescriptor;
|
||||||
|
import io.grpc.examples.helloworld.GreeterGrpc;
|
||||||
|
import io.grpc.examples.helloworld.HelloRequest;
|
||||||
|
import io.grpc.examples.helloworld.HelloResponse;
|
||||||
|
import io.grpc.netty.NegotiationType;
|
||||||
|
import io.grpc.netty.NettyChannelBuilder;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple client that requests a greeting from the
|
||||||
|
* {@link io.grpc.examples.helloworld.HelloWorldServer}.
|
||||||
|
*
|
||||||
|
* <p>This class should act a a drop in replacement for
|
||||||
|
* {@link io.grpc.examples.helloworld.HelloWorldClient}.
|
||||||
|
*/
|
||||||
|
public class CompressingHelloWorldClient {
|
||||||
|
private static final Logger logger =
|
||||||
|
Logger.getLogger(CompressingHelloWorldClient.class.getName());
|
||||||
|
|
||||||
|
private final ManagedChannel channel;
|
||||||
|
private final GreeterGrpc.GreeterBlockingStub blockingStub;
|
||||||
|
|
||||||
|
/** Construct client connecting to HelloWorld server at {@code host:port}. */
|
||||||
|
public CompressingHelloWorldClient(String host, int port) {
|
||||||
|
channel =
|
||||||
|
NettyChannelBuilder.forAddress(host, port).negotiationType(NegotiationType.PLAINTEXT)
|
||||||
|
.intercept(new ClientInterceptor() {
|
||||||
|
@Override
|
||||||
|
public <RequestT, ResponseT> ClientCall<RequestT, ResponseT> interceptCall(
|
||||||
|
MethodDescriptor<RequestT, ResponseT> method, CallOptions callOptions,
|
||||||
|
Channel next) {
|
||||||
|
return next.newCall(method, callOptions.withCompressor(new Codec.Gzip()));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
blockingStub = GreeterGrpc.newBlockingStub(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown() throws InterruptedException {
|
||||||
|
channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Say hello to server. */
|
||||||
|
public void greet(String name) {
|
||||||
|
try {
|
||||||
|
logger.info("Will try to greet " + name + " ...");
|
||||||
|
HelloRequest request = HelloRequest.newBuilder().setName(name).build();
|
||||||
|
HelloResponse response = blockingStub.sayHello(request);
|
||||||
|
logger.info("Greeting: " + response.getMessage());
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
logger.log(Level.WARNING, "RPC failed", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Greet server. If provided, the first element of {@code args} is the name to use in the
|
||||||
|
* greeting.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
CompressingHelloWorldClient client = new CompressingHelloWorldClient("localhost", 50051);
|
||||||
|
try {
|
||||||
|
/* Access a service running on the local machine on port 50051 */
|
||||||
|
String user = "world";
|
||||||
|
if (args.length > 0) {
|
||||||
|
user = args[0]; /* Use the arg as the name to greet if provided */
|
||||||
|
}
|
||||||
|
client.greet(user);
|
||||||
|
} finally {
|
||||||
|
client.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue