Add lb policy example (#32256)
* Add lb policy example * Update copyright * This is Python 3 * Fix isort
This commit is contained in:
parent
0014c91858
commit
d175c79935
|
|
@ -64,6 +64,10 @@ ARTIFACTS += data_transmission/demo_pb2.py
|
|||
ARTIFACTS += data_transmission/demo_pb2_grpc.py
|
||||
ARTIFACTS += data_transmission/demo_pb2.pyi
|
||||
|
||||
ARTIFACTS += lb_policies/helloworld_pb2.py
|
||||
ARTIFACTS += lb_policies/helloworld_pb2_grpc.py
|
||||
ARTIFACTS += lb_policies/helloworld_pb2.pyi
|
||||
|
||||
.PHONY: all
|
||||
all: ${ARTIFACTS}
|
||||
|
||||
|
|
@ -104,6 +108,9 @@ metadata/helloworld_pb2.py metadata/helloworld_pb2_grpc.py metadata/helloworld_p
|
|||
data_transmission/demo_pb2.py data_transmission/demo_pb2_grpc.py data_transmission/demo_pb2.pyi: data_transmission/demo.proto
|
||||
python3 -m grpc_tools.protoc --python_out=data_transmission --grpc_python_out=data_transmission --pyi_out=data_transmission -I data_transmission data_transmission/demo.proto
|
||||
|
||||
lb_policies/helloworld_pb2.py lb_policies/helloworld_pb2_grpc.py lb_policies/helloworld_pb2.pyi: ../protos/helloworld.proto
|
||||
python3 -m grpc_tools.protoc --python_out=lb_policies --grpc_python_out=lb_policies --pyi_out=lb_policies -I ../protos ../protos/helloworld.proto
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f ${ARTIFACTS}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
# Copyright 2023 gRPC authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
"""The Python implementation of the GRPC helloworld.Greeter client."""
|
||||
|
||||
import logging
|
||||
|
||||
import grpc
|
||||
import helloworld_pb2
|
||||
import helloworld_pb2_grpc
|
||||
|
||||
|
||||
def run():
|
||||
print("Will try to greet world ...")
|
||||
options = (("grpc.lb_policy_name", "round_robin"),)
|
||||
# Load balancing takes effect when the DNS server returns multiple IPs for the DNS hostname.
|
||||
# Replace "localhost" with such hostname to see the round robin LB policy take effect.
|
||||
with grpc.insecure_channel('localhost:50051', options=options) as channel:
|
||||
stub = helloworld_pb2_grpc.GreeterStub(channel)
|
||||
response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'))
|
||||
print("Greeter client received: " + response.message)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.basicConfig()
|
||||
run()
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
# Copyright 2023 gRPC authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
"""The Python implementation of the GRPC helloworld.Greeter server."""
|
||||
|
||||
from concurrent import futures
|
||||
import logging
|
||||
|
||||
import grpc
|
||||
import helloworld_pb2
|
||||
import helloworld_pb2_grpc
|
||||
|
||||
|
||||
class Greeter(helloworld_pb2_grpc.GreeterServicer):
|
||||
|
||||
def SayHello(self, request, context):
|
||||
return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
|
||||
|
||||
|
||||
def serve():
|
||||
port = '50051'
|
||||
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
|
||||
helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
|
||||
server.add_insecure_port('[::]:' + port)
|
||||
server.start()
|
||||
print("Server started, listening on " + port)
|
||||
server.wait_for_termination()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.basicConfig()
|
||||
serve()
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: helloworld.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2I\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'helloworld_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW'
|
||||
_HELLOREQUEST._serialized_start=32
|
||||
_HELLOREQUEST._serialized_end=60
|
||||
_HELLOREPLY._serialized_start=62
|
||||
_HELLOREPLY._serialized_end=91
|
||||
_GREETER._serialized_start=93
|
||||
_GREETER._serialized_end=166
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from typing import ClassVar as _ClassVar, Optional as _Optional
|
||||
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
|
||||
class HelloReply(_message.Message):
|
||||
__slots__ = ["message"]
|
||||
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
||||
message: str
|
||||
def __init__(self, message: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class HelloRequest(_message.Message):
|
||||
__slots__ = ["name"]
|
||||
NAME_FIELD_NUMBER: _ClassVar[int]
|
||||
name: str
|
||||
def __init__(self, name: _Optional[str] = ...) -> None: ...
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
||||
"""Client and server classes corresponding to protobuf-defined services."""
|
||||
import grpc
|
||||
|
||||
import helloworld_pb2 as helloworld__pb2
|
||||
|
||||
|
||||
class GreeterStub(object):
|
||||
"""The greeting service definition.
|
||||
"""
|
||||
|
||||
def __init__(self, channel):
|
||||
"""Constructor.
|
||||
|
||||
Args:
|
||||
channel: A grpc.Channel.
|
||||
"""
|
||||
self.SayHello = channel.unary_unary(
|
||||
'/helloworld.Greeter/SayHello',
|
||||
request_serializer=helloworld__pb2.HelloRequest.SerializeToString,
|
||||
response_deserializer=helloworld__pb2.HelloReply.FromString,
|
||||
)
|
||||
|
||||
|
||||
class GreeterServicer(object):
|
||||
"""The greeting service definition.
|
||||
"""
|
||||
|
||||
def SayHello(self, request, context):
|
||||
"""Sends a greeting
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
|
||||
def add_GreeterServicer_to_server(servicer, server):
|
||||
rpc_method_handlers = {
|
||||
'SayHello': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SayHello,
|
||||
request_deserializer=helloworld__pb2.HelloRequest.FromString,
|
||||
response_serializer=helloworld__pb2.HelloReply.SerializeToString,
|
||||
),
|
||||
}
|
||||
generic_handler = grpc.method_handlers_generic_handler(
|
||||
'helloworld.Greeter', rpc_method_handlers)
|
||||
server.add_generic_rpc_handlers((generic_handler,))
|
||||
|
||||
|
||||
# This class is part of an EXPERIMENTAL API.
|
||||
class Greeter(object):
|
||||
"""The greeting service definition.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def SayHello(request,
|
||||
target,
|
||||
options=(),
|
||||
channel_credentials=None,
|
||||
call_credentials=None,
|
||||
insecure=False,
|
||||
compression=None,
|
||||
wait_for_ready=None,
|
||||
timeout=None,
|
||||
metadata=None):
|
||||
return grpc.experimental.unary_unary(request, target, '/helloworld.Greeter/SayHello',
|
||||
helloworld__pb2.HelloRequest.SerializeToString,
|
||||
helloworld__pb2.HelloReply.FromString,
|
||||
options, channel_credentials,
|
||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
||||
Loading…
Reference in New Issue