«Сброс соединения по узлу» в python gRPC

Мы отправляем несколько запросов на сервер gRPC. Но время от времени мы сталкиваемся"Connection reset by peer"ошибка сUNAVAILABLEположение дел.

      GRPC server: NestJS

Client: Python

Python version: 3.8

gRPCio version: 1.50.0

Код:

      # Connect to server from client:

def connect_to_user_manager_server() -> AuthorizationControllerStub:
    channel = grpc.insecure_channel(envs.USER_MANAGER_GRPC_URL, options=(
        ('grpc.keepalive_time_ms', 120000),
        ('grpc.keepalive_permit_without_calls', True),
    ))
    stub = AuthorizationControllerStub(channel)

    return stub

client = connect_to_user_manager_server()

user_response = client.CheckAuthorization(authorizationData(authorization=token, requiredRoles=roles))

1 ответ

Вы можете добавить логику повторных попыток в свой клиентский код, используя библиотеку, такую ​​как повторные попытки, или реализовав ее вручную.

Например, вы можете реализовать логику повторных попыток, используя библиотеку повторных попыток:

      from retrying import retry

@retry(stop_max_attempt_number=3, wait_fixed=1000)
def connect_to_user_manager_server():
    channel = grpc.insecure_channel(envs.USER_MANAGER_GRPC_URL, options=(
        ('grpc.keepalive_time_ms', 120000),
        ('grpc.keepalive_permit_without_calls', True),
    ))
    stub = AuthorizationControllerStub(channel)
    return stub

Это повторит попыткуфункцию до 3 раз с задержкой в ​​1 секунду между каждой повторной попыткой.

Вы также можете реализовать это вручную, используя цикл и блок try-catch, например:

      attempt = 1
max_attempts = 3
while attempt <= max_attempts:
    try:
        channel = grpc.insecure_channel(envs.USER_MANAGER_GRPC_URL, options=(
            ('grpc.keepalive_time_ms', 120000),
            ('grpc.keepalive_permit_without_calls', True),
        ))
        stub = AuthorizationControllerStub(channel)
        break
    except Exception as e:
        if attempt == max_attempts:
            raise e
        attempt += 1
        time.sleep(1)

Это также повторит попытку подключения к серверу до 3 раз с задержкой в ​​1 секунду между каждой повторной попыткой.

Вы можете настроить количество повторных попыток и время задержки в соответствии с вашими потребностями.

Другие вопросы по тегам