Spring Cloud Feign学习

在Spring Cloud Ribbon学习文章中,是通过RestTemplate来进行http请求的,当时也提到过,Ribbon还可以和Feign结合,进行http调用。

Spring Cloud Feign是什么?

Feign是Netflix开发的声明式web服务客户端,采用了声明式API接口的风格,将Java Http客户端绑定到它的内部。Feign的首要目标是将Java Http客户端调用过程变得简单。

Spring Cloud Feign如何使用?

简单来说,就是在启动类上添加@EnableFeignClients注解,然后创建一个接口,在接口上添加@FeignClient注解,就可以使用了。
下面通过详细的操作来说明。既然Feign是一个声明式的web客户端,那还是通过服务消费者那个项目,创建一个Feign的client,通过这个client调用服务提供者。

1.在pom文件中引入依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

2.修改启动类,添加@EnableFeignClients注解。

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class MicroServiceConsumeApplication {
    public static void main(String[] args) {
        SpringApplication.run(MicroServiceConsumeApplication.class, args);
    }
}

@EnableFeignClients注解就代表开启Feign Client的功能。
3.创建EurekaFeignClient接口。

@FeignClient(name = "microservice-provider")
public interface EurekaFeignClient {
    @RequestMapping(value = "/provider", method = RequestMethod.GET)
    String getHello();
}

在EurekaFeignClient上添加注解@FeignClient,声明这是一个Feign Client,并且指定name属性为”microservice-provider”,这里的name就是指的远程调用其他服务的服务名,不区分大小写。

4.通过EurekaFeignClient调用microservice-provider

@RestController
public class ConsumerController {
    @Autowired
    private EurekaFeignClient eurekaFeignClient;

    @RequestMapping(value = "/consumer", method = RequestMethod.GET)
    public String consumer() {
        return eurekaFeignClient.getHello();
    }
}

修改ConsumerController类,原来是通过RestTemplate方式调用的,现在直接通过@Autowired注解,在ConsumerController注入EurekaFeignClient,调用eurekaFeignClient.getHello()方法就可以了。

Feign还默认集成了Ribbon,如果服务提供者有多台实例,则会均匀的请求到不同的实例上。

以上就是通过Feign方式来调用服务提供者的过程。

查看spring-cloud-starter-feign的pom文件,就可以发现,Feign不仅仅引入了Ribbon,还引入了Hystrix的依赖,后续我们还会进行Hystrix的学习。

参考资料:
1.《Spring Cloud与Docker微服务架构实战》 周立 著
2.《Spring Cloud微服务实战》 翟永超 著
3.《深入理解Spring Cloud与微服务构建》 方志朋 著

猜你喜欢

转载自blog.csdn.net/chayangdz/article/details/81477796