Как мне вызвать другой микро-сервис из моего микро-сервиса? - PullRequest
1 голос
/ 09 января 2020

Это может показаться немного странным, но я сталкиваюсь с ситуацией, когда у меня есть микро-сервис, который собирает некоторые логики цен c, но для этого ему нужна куча информации, которую предоставляет другой микро-сервис.

Я полагаю, что у меня есть два варианта: (1) получить все необходимые мне данные из базы данных и игнорировать работу GraphQL, которая была выполнена в этом другом микро-сервисе, или (2) каким-то образом ударить этот другой микро-сервис из моего текущего сервиса и получи необходимые мне данные.

Как бы кто-то сделал sh (2)?

У меня нет четкого пути, как это сделать без создания беспорядка .

Я полагаю, что превращение моего ценового микро-сервиса в маленького клиента может сработать, но я просто не уверен, что это плохая практика.

1 Ответ

1 голос
/ 09 января 2020

После долгих размышлений и прочтения полученных ответов здесь я решил превратить свой микросервис в мини-клиент с помощью apollo-client.

Короче говоря, у меня есть что-то вроде этого:

import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { HttpLink } from 'apollo-link-http';

// Instantiate required constructor fields
const cache = new InMemoryCache();
const link = new HttpLink({
  uri: 'http://localhost:3000/graphql',
});

const client = new ApolloClient({
  // Provide required constructor fields
  cache: cache,
  link: link,
});

export default client;

Этот HttpLink является федеративной схемой, поэтому я могу вызвать его из моего преобразователя или из любого другого места, например:

const query = gql`
        query {
          something(uid: "${uid}") {
            field1
            field2
            field3
            anotherThing {
              field1
              field2
            }
          }
        }
      `;
const response = await dataSources.client.query({query});
...