Spring Cloud Feign
Spring Cloud Feign is a set of declarative service invocation clients based on the Netflix feign implementation. It makes writing Web service clients easier. We only need to configure it by creating an interface and using annotations to complete the binding to the Web service interface. It features pluggable annotation support, including feign annotations, Jax-rs annotations. It also supports pluggable encoders and decoders. Spring Cloud Feign also extends support for spring MVC annotations, while also consolidating the ribbon and Eureka to provide an HTTP client implementation of a balanced load.
Below, we show an example of how feign can easily declare the definition and invocation of the Eureka-client service.
Give it a try.
In the following example, we will use the previously built Eureka-server as the service registry, Eureka-client as the service provider. And based on the spring Cloud Ribbon implementation of the consumer, we can according to Eureka-consumer implementation of the content can be easily changed to complete, the specific steps are as follows:
Copy a service consumer project according to Eureka-consumer, named: Eureka-consumer-feign. Add the following dependencies in the Pom.xml:
<dependencies> ... <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency></dependencies>
Modify the main class of the application. The ability to scan the spring Cloud feign client is enabled via @enablefeignclients annotations:
@EnableFeignClients@EnableDiscoveryClient@SpringBootApplicationpublic class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); }}
Create a feign client interface definition. Use the @feignclient annotation to specify the service name to invoke for this interface, and the functions defined in the interface can bind the rest interface of the service provider using spring MVC annotations, such as the following example of the/DC interface that binds the Eureka-client service:
@FeignClient("eureka-client")public interface DcClient { @GetMapping("/dc") String consumer();}
Modify the controller. The interface of the service provider is invoked by the defined feign client:
@RestControllerpublic class DcController { @Autowired DcClient dcClient; @GetMapping("/consumer") public String dc() { return dcClient.consumer(); }}
The way to implement service invocation through spring Cloud feign is much simpler, with the interface defined by @feignclient to unify the life we need to rely on for the MicroServices interface. And in the specific use of the call to the local method a little bit of the call. Since feign is implemented based on the Ribbon, it comes with client load balancing, and can be extended through the irule of the Ribbon. In addition, feign integrates the Hystrix to implement fault-tolerant protection of the service, and in Dalston version, feign Hystrix is turned off by default. After introducing Hystrix, we will introduce the hystrix in feign and how to configure them.
After you have finished writing your code, the reader can start Eureka-server, Eureka-client, Eureka-consumer-feign, and then access Http://localhost:2101/consumer, To track how the Eureka-consumer-feign service consumes the/DC interface of the Eureka-client service, and can also observe its load balancing effect by initiating multiple eureka-client services.
Building a microservices Architecture Spring Cloud: Service consumption (feign)