-
Создавать декларативные 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
будет содержать в себе стектрейс от сервера.