Skip to content

Latest commit

 

History

History
89 lines (73 loc) · 3.38 KB

README.adoc

File metadata and controls

89 lines (73 loc) · 3.38 KB

Возможности и цели

  • Создавать декларативные HTTP клиенты feign через JAX-RS аннотации.

  • Автоконфигурация Spring Boot.

  • Совместимость с REST сервисами, написанными с использованием n2o-platform-starter-jaxrs-server.

  • Полная поддержка возможностей n2o-platform-starter-jaxrs-client.

  • Клиентская балансировка с использованием Netflix Ribbon.

Инструкции

Подключение

Добавьте зависимость:

<dependency>
  <groupId>net.n2oapp.platform</groupId>
  <artifactId>n2o-platform-starter-feign-client</artifactId>
</dependency>

Также вам понадобится зависимость от api-модуля, где лежат ваши интерфейсы сервисов с аннотациями jaxrs.

Создание клентов

Чтобы создавать прокси клиенты, нужно добавить аннотацию @EnableFeignClients в конфигурацию Spring:

import org.springframework.cloud.openfeign.EnableFeignClients;
...
@Configuration
@EnableFeignClients
public class ExampleConfiguration {
  ...
}

Аннотация сканирует созданные feign клиенты в проекте. Указать конкретные классы без сканирования можно с помощью атрибута clients.

Чтобы создать клиента, нужно повесить аннотацию @FeignClient на интерфейс с аннотациями jaxrs:

@FeignClient(name = "someService")
public interface SampleClient extends SomeRest { }

, где name - имя сервиса. Адрес сервиса определится автоматически по его имени через службу Service Discovery. Если Service Discovery в окружении нет, то нужно прописать адрес сервиса вручную с помощью атрибута url:

@FeignClient(name = "someService", url = "https://example.com/api")
public interface SampleClient extends SomeRest { }

Использование

Используйте REST прокси клиенты как обычные Spring бины:

@Service
public class ConsumerServiceImpl {
  @Autowired
  private SampleClient client;

  ...
}

Каждый вызов метода прокси клиента будет делать http запрос к сервису.

Обработка исключений

При использовании REST прокси клиентов, исключения возникшие на сервере, автоматически выбрасываются и на клиенте. Класс исключений: RestException:

try {
   client.create(model);
 } catch (RestException e) {
   e.getMessage();//Локализованное сообщение
   e.getErrors();//Ошибки JSR303 валидаций
 }

При этом стектрейс исключения RestException будет содержать в себе стектрейс от сервера.