简单介绍
当我们通过 grpc 进行客户端服务端通信时,健全的代码应该尽可能的对不同的异常情况进行捕获并做出相应的处理。对于 grpc的话,我们可以通过 try-catch
的形式来进行捕获.
例如像是下面这样子:
应用层可以就像下面这样子进行书写,当然这种感觉不是特别好,具体可以参考本文后面的内容。
try:
response = stub.SayHello(...)
except grpc.RpcError as rpc_error:
if rpc_error.code() == grpc.StatusCode.CANCELLED:
pass
elif rpc_error.code() == grpc.StatusCode.UNAVAILABLE:
pass
else:
print(f"Received unknown RPC error: code={
rpc_error.code()} message={
rpc_error.details()}")
这里我们看下它示例代码当中的 RpcError
,继承的父类为一个空的类,这里就不展示了。需要注意的是,每一个抛出的异常都有其对应的错误状态码,具体内容在 grpc/__init.py__ 当中的 StatusCode 接口。
接口书写
将上面介绍内容的代码进行补充之后,就类似于下面这段:
stub = exercise_pb2_grpc.ServerStub(channel)
try:
guide_get_one_feature(
stub, exercise_pb2.Point(latitude