Spring Boot - как общаться между микросервисами? - PullRequest
0 голосов
/ 24 мая 2018

В настоящее время я работаю над проектом микросервисов Spring Boot.Я создал сервисы, и каждый сервис работает отдельно.При этом мне нужны некоторые сервисы для общения с другими сервисами.Как я могу этого достичь?

Я видел несколько блогов об этом, которые используют Netflix, облачные серверы Eureka для достижения этой цели.Можно ли как-то добиться этого в моей локальной среде без использования облачных серверов?

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Конечно можно.Микросервисы - это просто REST-сервисы.Вам необходимо понять, как работают REST-сервисы.После этого просто напишите 2 Microservices (2 Rest-Services: служба-производитель и служба-потребитель) с помощью Spring-boot, пусть они будут работать под разными портами сервера, вызовите службу-получатель от другого, и все: у вас естьMicroservices.Теперь это примитивный способ написания микросервисов.

Чтобы они развивались, вам нужно добавить немного «магии» (без ракетостроения), например, используя Ленточку для распределения нагрузки между двумя экземплярами вашей «службы-производителя».

Выможет использовать службу обнаружения, которая является просто подпружиненным приложением с аннотацией @EnableEurekaServer (необходимо добавить соответствующую зависимость в pom). Теперь добавьте к своим первым (примитивным) Microservices аннотацию @EnableDiscoveryClient для основных классов и defaultZoneуказав на ваш eureka-сервис в application.properties (или application.yml) обоих, запустите ваш eureka-сервис (сервис обнаружения) и 2 микросервиса: они будут зарегистрированы в сервисе обнаружения.Конечно, теперь вам не нужно жестко кодировать http-адрес службы-производителя в службе-потребителе.
Взгляните на этот учебник

Отредактировано 21-го числаноября 2018 года в 12:41 по Гринвичу

Предположим, что ваш первый (тривиальный) микросервис (чистый отдых) работает на вашем компьютере через порт 8091.

В контроллере вашего второго(тривиальный) микросервис, который вы называете своим первым сервисом, используя RestTemplate.getForEntity (url, responseType, uriVariables), как, например, для примера в связанном учебном пособии:

ResponseEntity<CurrencyConversionBean> responseEntity = 
   new RestTemplate().getForEntity(
        "http://localhost:8091/currency-exchange/from/{from}/to/{to}", CurrencyConversionBean.class,  uriVariables);

Где url: URL вашего первого (микро) (остальное) обслуживание.responseType: класс / тип объекта, ожидаемого в качестве ответа.uriVariables: карта, содержащая переменные для шаблона URI.

0 голосов
/ 15 июля 2019

Существуют разные способы связи между микросервисами.Но какой из них использовать: зависит от варианта использования.

  1. Api call: это фактический вызов api rest другой службе с использованием RestTemplate, FeignClient и т. Д.
ResponseType obj=  new RestTemplate().getForObject(URL, ResponseType.class, params);
Но что, если сценарий использования отличается, например, у вас есть клиент микросервис и заказы микросервис, оба используют отдельную базу данных.У вас есть customer name и другие данные в базе данных orders.После того, как клиент обновит свое имя, вы также должны обновить информацию в базе данных заказов.Как это можно сделать.Через API call?Тогда что, если account microservice также нуждается в этом обновлении.Так что отдых API будет накладным.В этом случае мы можем использовать MessageQueues как RabbitMQ.Клиентский микросервис создаст событие обновления клиента, и любой микросервис, заинтересованный в этом, может подписаться.

Связь через очередь сообщений, например, RabbitMQ

Spring.io rabbit mq guide

0 голосов
/ 25 мая 2018

Как упомянуто @ g00glen00b в комментариях, Eureka не используется для связи между микросервисами.Это для открытия службы.Я знаю о двух способах взаимодействия с другими микросервисами:

  1. RestTemplate
  2. Feign Client

RestTemplate очень прост в использовании.Конфигурации не требуются.

например,

   ResponseType obj=  new RestTemplate().getForObject(URL, ResponseType.class, params);

url - URL-адрес

responseType - тип возвращаемого значения

params- переменныеразвернуть шаблон

Spring Doc ссылка для справки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...