xref: /aosp_15_r20/external/grpc-grpc/examples/cpp/load_balancing/README.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# gRPC C++ Load Balancing Tutorial
2*cc02d7e2SAndroid Build Coastguard Worker
3*cc02d7e2SAndroid Build Coastguard Worker### Prerequisite
4*cc02d7e2SAndroid Build Coastguard WorkerMake sure you have run the [hello world example](../helloworld) or understood the basics of gRPC. We will not dive into the details that have been discussed in the hello world example.
5*cc02d7e2SAndroid Build Coastguard Worker
6*cc02d7e2SAndroid Build Coastguard Worker### Get the tutorial source code
7*cc02d7e2SAndroid Build Coastguard Worker
8*cc02d7e2SAndroid Build Coastguard WorkerThe example code for this and our other examples lives in the `examples` directory. Clone this repository
9*cc02d7e2SAndroid Build Coastguard Workerat the [latest stable release tag](https://github.com/grpc/grpc/releases) to your local machine by running the following command:
10*cc02d7e2SAndroid Build Coastguard Worker
11*cc02d7e2SAndroid Build Coastguard Worker
12*cc02d7e2SAndroid Build Coastguard Worker```sh
13*cc02d7e2SAndroid Build Coastguard Worker$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
14*cc02d7e2SAndroid Build Coastguard Worker```
15*cc02d7e2SAndroid Build Coastguard Worker
16*cc02d7e2SAndroid Build Coastguard WorkerChange your current directory to examples/cpp/load_balancing
17*cc02d7e2SAndroid Build Coastguard Worker
18*cc02d7e2SAndroid Build Coastguard Worker```sh
19*cc02d7e2SAndroid Build Coastguard Worker$ cd examples/cpp/load_balancing/
20*cc02d7e2SAndroid Build Coastguard Worker```
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard Worker### Generating gRPC code
23*cc02d7e2SAndroid Build Coastguard Worker
24*cc02d7e2SAndroid Build Coastguard WorkerTo generate the client and server side interfaces:
25*cc02d7e2SAndroid Build Coastguard Worker
26*cc02d7e2SAndroid Build Coastguard Worker```sh
27*cc02d7e2SAndroid Build Coastguard Worker$ make helloworld.grpc.pb.cc helloworld.pb.cc
28*cc02d7e2SAndroid Build Coastguard Worker```
29*cc02d7e2SAndroid Build Coastguard WorkerWhich internally invokes the proto-compiler as:
30*cc02d7e2SAndroid Build Coastguard Worker
31*cc02d7e2SAndroid Build Coastguard Worker```sh
32*cc02d7e2SAndroid Build Coastguard Worker$ protoc -I ../../protos/ --grpc_out=. --plugin=protoc-gen-grpc=grpc_cpp_plugin ../../protos/helloworld.proto
33*cc02d7e2SAndroid Build Coastguard Worker$ protoc -I ../../protos/ --cpp_out=. ../../protos/helloworld.proto
34*cc02d7e2SAndroid Build Coastguard Worker```
35*cc02d7e2SAndroid Build Coastguard Worker
36*cc02d7e2SAndroid Build Coastguard Worker### Writing a client and a server
37*cc02d7e2SAndroid Build Coastguard Worker
38*cc02d7e2SAndroid Build Coastguard WorkerThe client and the server can be based on the hello world example.
39*cc02d7e2SAndroid Build Coastguard Worker
40*cc02d7e2SAndroid Build Coastguard WorkerAdditionally, we can configure the load balancing policy. (To see what load balancing policies are available, check out [this folder](https://github.com/grpc/grpc/tree/master/src/core/ext/filters/client_channel/lb_policy).)
41*cc02d7e2SAndroid Build Coastguard Worker
42*cc02d7e2SAndroid Build Coastguard WorkerIn the client, set the load balancing policy of the channel via the channel arg (to, for example, Round Robin).
43*cc02d7e2SAndroid Build Coastguard Worker
44*cc02d7e2SAndroid Build Coastguard Worker```cpp
45*cc02d7e2SAndroid Build Coastguard Worker  ChannelArguments args;
46*cc02d7e2SAndroid Build Coastguard Worker  // Set the load balancing policy for the channel.
47*cc02d7e2SAndroid Build Coastguard Worker  args.SetLoadBalancingPolicyName("round_robin");
48*cc02d7e2SAndroid Build Coastguard Worker  GreeterClient greeter(grpc::CreateCustomChannel(
49*cc02d7e2SAndroid Build Coastguard Worker      "localhost:50051", grpc::InsecureChannelCredentials(), args));
50*cc02d7e2SAndroid Build Coastguard Worker```
51*cc02d7e2SAndroid Build Coastguard Worker
52*cc02d7e2SAndroid Build Coastguard WorkerFor a working example, refer to [greeter_client.cc](greeter_client.cc) and [greeter_server.cc](greeter_server.cc).
53*cc02d7e2SAndroid Build Coastguard Worker
54*cc02d7e2SAndroid Build Coastguard WorkerBuild and run the client and the server with the following commands.
55*cc02d7e2SAndroid Build Coastguard Worker
56*cc02d7e2SAndroid Build Coastguard Worker```sh
57*cc02d7e2SAndroid Build Coastguard Workermake
58*cc02d7e2SAndroid Build Coastguard Worker./greeter_server
59*cc02d7e2SAndroid Build Coastguard Worker```
60*cc02d7e2SAndroid Build Coastguard Worker
61*cc02d7e2SAndroid Build Coastguard Worker```sh
62*cc02d7e2SAndroid Build Coastguard Worker./greeter_client
63*cc02d7e2SAndroid Build Coastguard Worker```
64*cc02d7e2SAndroid Build Coastguard Worker
65*cc02d7e2SAndroid Build Coastguard Worker(Note that the case in this example is trivial because there is only one server resolved from the name.)