spring cloud之Fegin简单实例

Feign定义:

Feign是一个声明性的Web服务客户端。它使编写Web服务客户端变得更容易。要使用Feign,请创建一个界面并对其进行注释。它具有可插入的注释支持,包括Feign注释和JAX-RS注释。 Feign还支持可插拔编码器和解码器。 Spring Cloud增加了对Spring MVC注释的支持,并使用了Spring Web中默认使用的相同HttpMessageConverters。 Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载均衡的http客户端。

实例

引入依赖包

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

新建Fegin接口

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(value = "employee-msg-provider")
public interface FeginService {
    @RequestMapping("/employee/hello")
    String hello();

    @RequestMapping(value = "/employee/findById", method= RequestMethod.GET)
    String findById(@RequestParam("id") int name) ;
}

解析:employee-msg-provider是要调用的服务名,这个接口定义在调用方。
spring cloud之Fegin简单实例
启动类添加EnableFeignClients注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ProviderclientApplication {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    public IRule myRule() {
        //指定重试策略,随机策略
        return new RandomRule();
    }

    public static void main(String[] args) {
        SpringApplication.run(ProviderclientApplication.class, args);
    }

}

下面是用restTemplate调用其他服务接口

@RestController
@RequestMapping("getEmployeeController")
public class GetEmployeeController {

    @Autowired
    private RestTemplate restTemplate;
    //注入
    @Autowired
    private FeginService feginService;

    //@Autowired
    //private LoadBalancerClient loadBalancerClient;

    //原先用restTemplate调用其他服务
    @GetMapping("/user/{id}")
    public Employee findById(@PathVariable int id) {
        Employee employee = this.restTemplate.getForObject("http://employee-msg-provider/employee/findById?id=" + id, Employee.class);
        return employee;
    }

    @RequestMapping("testFeign")
    public String testFeign() {
        return feginService.hello();
    }

    //用feign嗲用其他服务
    @RequestMapping("feignFindById")
    public String feignFindById(int id) {
        return feginService.findById(id);
    }
}
上一篇:Fegin的使用总结


下一篇:fegin-----fallback引发的问题