Сбой запросов Grpc, когда клиент python используется внутри фляги

У меня есть фляжное приложение, которому нужно сделать запрос на сервер grpc, когда запрос сделан на конечную точку фляги.

@main.route("/someroute", methods=["POST"])
def some_function():
    # Do something here
    make_grpc_request(somedata)
    return create_response(data=None, message = "Something happened")


def make_grpc_request(somedata):
    channel = grpc.insecure_channel('localhost:30001')
    stub = some_proto_pb2_grpc.SomeServiceStub(channel)
    request = some_proto_pb2.SomeRequest(id=1)
    response = stub.SomeFunction(request)
    logger.info(response)

Но я продолжаю получать ошибку InactiveRpcError of RPC that terminated with: StatusCode.UNAVAILABLE failed to connect to all addresses

Простое размещение клиентского кода в обычном файле .py работает нормально, и выполнение запроса внутри BloomRPC тоже работает нормально, так что это не может быть проблемой сервера.

Это как-то связано с тем, как работает фляга, и я просто что-то упускаю?

Я также безуспешно пытался использовать https://github.com/public/sonora:

with sonora.client.insecure_web_channel("localhost:30001") as channel:
    stub = some_proto_pb2_grpc.SomeServiceStub(channel)
    request = some_proto_pb2.SomeRequest(id=1)
    response = stub.SomeFunction(request)

докер-compose.yml

version: "3.7"

services:
  core-profile: #This is where the grpc requests are sent to
    container_name: core-profile
    build:
      context: ./app/profile/
      target: local
    volumes:
      - ./app/profile/:/usr/src/app/
    env_file:
      - ./app/profile/database.env
      - ./app/profile/jwt.env
      - ./app/profile/oauth2-dev.env
    environment:
      - APP_PORT=50051
      - PYTHONUNBUFFERED=1
      - POSTGRES_HOST=core-profile-db
    ports:
      - 30001:50051
    expose:
      - 50051
    depends_on:
      - core-profile-db

  core-profile-db:
    image: postgres:10-alpine
    expose:
      - 5432
    ports:
      - 54321:5432
    env_file:
      - ./app/profile/database.env

  app-flask-server-db:
    image: postgres:10-alpine
    expose:
      - 5433
    ports:
      - 54333:5433
    env_file:
      - ./app/flask-server/.env

  flask-server:
    build:
      context: ./app/flask-server/
      dockerfile: Dockerfile-dev
    volumes:
      - ./app/flask-server:/usr/src/app/
    env_file:
      - ./app/flask-server/.env
    environment:
      - FLASK_ENV=docker
    ports:
      - 5000:5000
    depends_on:
      - app-flask-server-db

volumes:
  app-flask-server-db:
    name: app-flask-server-db

Как у вас обстоят дела?

DazWilkin 12.12.2020 03:15

Службы grpc работают внутри контейнера докеров, используя тот же файл docker-compose.yml, что и сервер flask.

Reez0 12.12.2020 14:39

Было бы полезно включить файл docker-compose.yml в ваш вопрос. Я подозреваю (!?), что вы пытаетесь получить доступ к серверу gRPC как localhost, но Compose DNS дал ему другое имя (имя службы).

DazWilkin 12.12.2020 19:09

Спасибо, Даз, я добавил файл docker-compose.yml.

Reez0 12.12.2020 21:43

Итак, ваше приложение Python должно ссылаться на службу gRPC как core-profile:50051

DazWilkin 12.12.2020 21:46

Имя хоста — служба Compose core-profile, и, поскольку служба Python также находится в сети Compose, она должна использовать 50051. localhost:30001 — это способ доступа к нему с хоста Compose.

DazWilkin 12.12.2020 21:48

Хорошо, теперь это работает. Как глупо с моей стороны. Вы можете добавить это как ответ, и я приму это.

Reez0 13.12.2020 12:43

Я рад слышать, что это работает!

DazWilkin 13.12.2020 15:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
1 080
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваше приложение (служба) Python должно ссылаться на службу gRPC как core-profile:50051.

Имя хоста — служба Compose core-profile, и, поскольку служба Python также находится в сети Compose, она должна использовать 50051.

localhost:30001 — это то, как вы бы получили к нему доступ с хоста Compose.

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