| 
					
				 | 
			
			
				@@ -118,10 +118,11 @@ familiar with protocol buffers, you can find out more in the [Protocol Buffers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Developer Guide](https://developers.google.com/protocol-buffers/docs/overview). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Here's our example service definition, defined using protocol buffers IDL in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-[helloworld.proto](java/src/main/proto/helloworld.proto) _should we link to the version in the Java subdirectory or the one in the common protos directory?_. The `Greeting` service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[helloworld.proto](java/src/main/proto/helloworld.proto). The `Greeting` service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 has one method, `hello`, that lets the server receive a single `HelloRequest` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 message from the remote client containing the user's name, then send back 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-a greeting in a `HelloReply`. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+a greeting in a single `HelloReply`. This is the simplest type of RPC you 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+can specify in gRPC - we'll look at some other types later in this document. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 syntax = "proto3"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -167,7 +168,8 @@ this up in "what is gRPC"?] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 the example, you can skip this step and move 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 onto the next one where we examine the generated code.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-As this is our first time using gRPC, we need to build the protobuf plugin that generates our RPC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As this is our first time using gRPC, we need to build the protobuf plugin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+that generates our RPC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 classes. By default `protoc` just generates code for reading and writing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 protocol buffers, so you need to use plugins to add additional features 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 to generated code. As we're creating Java code, we use the gRPC Java plugin. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -190,77 +192,97 @@ $ protoc -I . helloworld.proto 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                --java_out=src/main/java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-This generates the following classes, which contain all the generated code we need to create our example:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+This generates the following classes, which contain all the generated code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+we need to create our example: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- [`Helloworld.java`](java/src/main/java/ex/grpc/Helloworld.java), which has all the protocol buffer code to populate, serialize, and retrieve our `HelloRequest` and `HelloReply` message types 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- [`GreetingsGrpc.java`](java/src/main/java/ex/grpc/GreetingsGrpc.java), which contains (along with some other useful code): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- [`Helloworld.java`](java/src/main/java/ex/grpc/Helloworld.java), which 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+has all the protocol buffer code to populate, serialize, and retrieve our 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`HelloRequest` and `HelloReply` message types 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- [`GreetingsGrpc.java`](java/src/main/java/ex/grpc/GreetingsGrpc.java), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+which contains (along with some other useful code): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     - an interface for `Greetings` servers to implement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public static interface Greetings { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void hello(ex.grpc.Helloworld.HelloRequest request, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        com.google.net.stubby.stub.StreamObserver<ex.grpc.Helloworld.HelloReply> responseObserver); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        com.google.net.stubby.stub.StreamObserver<ex.grpc.Helloworld.HelloReply> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        responseObserver); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    - _stub_ classes that clients can use to talk to a `Greetings` server. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    - _stub_ classes that clients can use to talk to a `Greetings` server. As you can see, they also implement the `Greetings` interface. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public static class GreetingsStub extends 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      com.google.net.stubby.stub.AbstractStub<GreetingsStub, GreetingsServiceDescriptor> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      com.google.net.stubby.stub.AbstractStub<GreetingsStub, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      GreetingsServiceDescriptor> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       implements Greetings { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <a name="server"></a> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ### Writing a server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Now let's write some code! First we'll create a server application to implement our service. Note that we're not going to go into a lot of detail about how to create a server in this section  More detailed information will be in the tutorial for your chosen language (coming soon). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Now let's write some code! First we'll create a server application to implement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+our service. Note that we're not going to go into a lot of detail about how 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+to create a server in this section More detailed information will be in the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+tutorial for your chosen language (coming soon). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Our server application has two classes: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- a simple service implementation [GreetingsImpl.java](java/src/main/java/ex/grpc/GreetingsImpl.java). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- a simple service implementation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[GreetingsImpl.java](java/src/main/java/ex/grpc/GreetingsImpl.java). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- a server that hosts the service implementation and allows access over the network: [GreetingsServer.java](src/main/java/ex/grpc/GreetingsServer.java). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- a server that hosts the service implementation and allows access over the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+network: [GreetingsServer.java](java/src/main/java/ex/grpc/GreetingsServer.java). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #### Service implementation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 [GreetingsImpl.java](java/src/main/java/ex/grpc/GreetingsImpl.java) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-implements the behaviour we require of our GreetingService. There are a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-number of important features of gRPC being used here: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+actually implements our GreetingService's required behaviour. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As you can see, the class `GreetingsImpl` implements the interface 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`GreetingsGrpc.Greetings` that we [generated](#generating) from our proto 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[IDL](java/src/main/proto/helloworld.proto) by implementing the method `hello`: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public void hello(Helloworld.HelloRequest req, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       StreamObserver<Helloworld.HelloReply> responseObserver) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Helloworld.HelloReply reply = Helloworld.HelloReply.newBuilder().setMessage( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Helloworld.HelloReply reply = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Helloworld.HelloReply.newBuilder().setMessage( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         "Hello " + req.getName()).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     responseObserver.onValue(reply); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     responseObserver.onCompleted(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- it provides a class `GreetingsImpl` that implements a generated interface `GreetingsGrpc.Greetings` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- `GreetingsGrpc.Greetings` declares the method `hello` that was declared in the proto [IDL](src/main/proto/helloworld.proto) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - `hello's` signature is typesafe: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   hello(Helloworld.HelloRequest req, StreamObserver<Helloworld.HelloReply> responseObserver) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   `hello(Helloworld.HelloRequest req, StreamObserver<Helloworld.HelloReply> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   responseObserver)` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - `hello` takes two parameters: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  `Helloworld.HelloRequest`: the request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  `StreamObserver<Helloworld.HelloReply>`: a response observer, an interface to be called with the response value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- to complete the call 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  - the return value is constructed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  - the responseObserver.onValue() is called with the response 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  - responseObserver.onCompleted() is called to indicate that no more work will done on the RPC. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    -`Helloworld.HelloRequest`: the request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    -`StreamObserver<Helloworld.HelloReply>`: a response observer, which is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    a special interface for the server to call with its response 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+To return our response to the client and complete the call: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+1. We construct and populate a `HelloReply` response object with our exciting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+message, as specified in our interface definition. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+2. We call `responseObserver.onValue()` with the `HelloReply` that we want to send back to the client. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+3. Finally, we call `responseObserver.onCompleted()` to indicate that we're 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+finished dealing with this RPC. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #### Server implementation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-[GreetingsServer.java](src/main/java/ex/grpc/GreetingsServer.java) shows the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-other main feature required to provde the gRPC service; how to allow a service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-implementation to be accessed from the network. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[GreetingsServer.java](java/src/main/java/ex/grpc/GreetingsServer.java) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+shows the other main feature required to provide a gRPC service; making the service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+implementation available from the network. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private ServerImpl server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private void start() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     server = NettyServerBuilder.forPort(port) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              .addService(GreetingsGrpc.bindService(new GreetingsImpl())) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -271,9 +293,16 @@ implementation to be accessed from the network. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- it provides a class `GreetingsServer` that holds a `ServerImpl` that will run the server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- in the `start` method, `GreetingServer` binds the `GreetingsService` implementation to a port and begins running it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- there is also a `stop` method that takes care of shutting down the service and cleaning up when the program exits 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The `GreetingsServer` class has a `ServerImpl` member that actually runs the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+server. To create an appropriate `ServerImpl`, we use a special `ServerBuilder` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class (in this case a `NettyServerBuilder`) in the `GreetingsServer`'s `start` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+method, binding the `GreetingsService` implementation that we created to a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+port. Then we start the server running: the server is now ready to receive 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+requests from `Greetings` service clients on our specified port. We'll cover 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+how all this works in a bit more detail in our language-specific documentation. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`GreetingsServer` also has a `stop` method that takes care of shutting down 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the service and cleaning up when the program exits. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #### Build it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -288,16 +317,22 @@ We'll look at using a client to access the server in the next section. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <a name="client"></a> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ### Writing a client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Client-side gRPC is pretty simple. In this step, we'll use the generated code to write a simple client that can access the `Greetings` server we created in the previous section. You can see the complete client code in [GreetingsClient.java](src/main/java/ex/grpc/GreetingsClient.java). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Client-side gRPC is pretty simple. In this step, we'll use the generated code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+to write a simple client that can access the `Greetings` server we created 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+in the [previous section](#server). You can see the complete client code in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[GreetingsClient.java](java/src/main/java/ex/grpc/GreetingsClient.java). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Again, we're not going to go into much detail about how to implement a client - we'll leave that for the tutorial. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Again, we're not going to go into much detail about how to implement a client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- we'll leave that for the tutorial. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #### Connecting to the service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-. The internet address 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-is configured in the client constructor. gRPC Channel is the abstraction over 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+First let's look at how we connect to the `Greetings` server. The internet 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+address 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+is configured in the client constructor. gRPC `Channel` provides the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+abstraction layer over 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 transport handling; its constructor accepts the host name and port of the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-service. The channel in turn is used to construct the Stub. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+service. The channel in turn is used to construct the stub instance. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ```java 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -313,20 +348,28 @@ service. The channel in turn is used to construct the Stub. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+In this case, we create a blocking stub. This means that the RPC call waits 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+for the server to respond, and will either return a response or raise an 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+exception. gRPC Java has other kinds of stubs that make non-blocking calls 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+to the server, where the response is returned asynchronously. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #### Obtaining a greeting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The greet method uses the stub to contact the service and obtain a greeting. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-It: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- constructs a request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- obtains a reply from the stub 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- prints out the greeting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The `greet()` method uses the stub to contact the service and obtain 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+a greeting. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+To do this: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+1. We construct and fill in a `HelloRequest` to send to the stub. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+2. We call the RPC with our request and get a `HelloReply` from the stub, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from which we can get our greeting. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public void greet(String name) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     logger.debug("Will try to greet " + name + " ..."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      Helloworld.HelloRequest request = Helloworld.HelloRequest.newBuilder().setName(name).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      Helloworld.HelloRequest request = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      Helloworld.HelloRequest.newBuilder().setName(name).build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       Helloworld.HelloReply reply = blockingStub.hello(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       logger.info("Greeting: " + reply.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } catch (RuntimeException e) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -355,22 +398,14 @@ line. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #### Build the client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-This is the same as before: our client and server are part of the same maven 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+This is the same as building the server: our client and server are part of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+the same maven 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package so the same command builds both. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ mvn package 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#### Notes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- The client uses a blocking stub. This means that the RPC call waits for the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  server to respond, and will either return a response or raise an exception. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-- gRPC Java has other kinds of stubs that make non-blocking calls to the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  server, where the response is returned asynchronously.  Usage of these stubs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  is a more advanced topic and will be described in later steps. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <a name="run"></a> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ### Try it out! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -387,6 +422,10 @@ and in another terminal window confirm that it receives a message. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ ./run_greetings_client.sh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+### Adding another client 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+###TODO: Section on Go client for same server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |