# gRPC 服务
# 创建与运行
yuanbootctl-python new grpc -n inventory --framework-version 0.2.0
cd inventory
python -m pip install -e '.[dev]'
yuanbootctl-python run --profile dev
grpc 模板自动声明 yuanboot[grpc] 依赖,默认监听 127.0.0.1:9090。
该项目通过 Console 入口运行 gRPC 宿主,不启动 HTTP /docs 页面。
# 配置监听地址
在 config_pro.yml 中设置:
yuanboot:
application:
name: inventory
grpc:
address: "0.0.0.0:9090"
shutdown_grace: 5
启动时使用 yuanbootctl-python run --profile pro。
Web 的 --port 不用于修改 gRPC 端口,gRPC 监听地址以 yuanboot.grpc.address 为准。
# 注册服务
GrpcHostBuilder 通过 configure_server 注册服务,示例:
import grpc
from google.protobuf.wrappers_pb2 import StringValue
from yuanboot import ConfigurationBuilder
from yuanboot.grpc import GrpcHostBuilder
async def hello(request, context):
return StringValue(value=f"Hello, {request.value}!")
def configure_server(server, services):
handler = grpc.unary_unary_rpc_method_handler(
hello,
request_deserializer=StringValue.FromString,
response_serializer=StringValue.SerializeToString,
)
server.add_generic_rpc_handlers((
grpc.method_handlers_generic_handler("demo.Greeter", {"Hello": handler}),
))
config = ConfigurationBuilder().add_yaml_file().add_environment().build()
host = GrpcHostBuilder(config).use_components().configure_server(configure_server).build()
if __name__ == "__main__":
host.run()
业务使用自己的 proto 时,将生成代码中的 add_*Servicer_to_server 放入 configure_server。
回调中的 services 可解析已注册的依赖。
支持通过 configure_server(..., interceptors=..., credentials=...) 传递拦截器和 TLS 凭据。
# 健康与停止
宿主注册标准 gRPC Health 服务。服务启动后状态为 SERVING,
停止时进入优雅关闭阶段,并按 shutdown_grace 等待请求结束。
启用服务发现时,注册端口应与真实 RPC 监听端口一致,见组件配置与使用。