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是要调用的服务名,这个接口定义在调用方。
启动类添加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);
}
}