【发布时间】:2019-11-20 21:34:49
【问题描述】:
【问题讨论】:
标签: grpc grpc-python
【问题讨论】:
标签: grpc grpc-python
accompanying unit tests 是一个很好的参考。
def start_server(self, non_blocking=False, thread_pool=None):
self._thread_pool = thread_pool
self._servicer = health.HealthServicer(
experimental_non_blocking=non_blocking,
experimental_thread_pool=thread_pool)
self._servicer.set('', health_pb2.HealthCheckResponse.SERVING)
self._servicer.set(_SERVING_SERVICE,
health_pb2.HealthCheckResponse.SERVING)
self._servicer.set(_UNKNOWN_SERVICE,
health_pb2.HealthCheckResponse.UNKNOWN)
self._servicer.set(_NOT_SERVING_SERVICE,
health_pb2.HealthCheckResponse.NOT_SERVING)
self._server = test_common.test_server()
port = self._server.add_insecure_port('[::]:0')
health_pb2_grpc.add_HealthServicer_to_server(
self._servicer, self._server)
self._server.start()
在您的应用程序服务器的主服务程序类中保留对健康服务程序的引用。然后,在适当的时候调用set() 方法,例如当启动完成或进入无法处理请求的状态时。但是请注意,这利用了一些实验性功能,以确保附加的健康服务程序不会导致应用程序级请求被饿死。
【讨论】:
SERVING 的单行来实现。如果服务器启动后有一段时间应用程序需要进行预处理。或者,如果应用程序在其下游依赖项之一不起作用时根本无法运行,那么能够自己设置该状态至关重要。
我发现这个例子很有帮助: https://github.com/grpc/grpc/tree/master/examples/python/xds
具体来说,server.py 提供了健康检查和反射的实现。
【讨论】: