1.引用jar包,pom文件

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

2.启动类上面加注解@EnableFeignClients
表示扫描带有@FeignClient注解的接口
添加注解之后的启动类是这个样子

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

3.写一个接口并且用@FeignClient注解
前提最好用浏览器或者HTTP工具,比如PostMan测试一下那个被调用的接口,确保被调用的接口是可用的

注意:name与url的区别,如果调用的服务,和我们的服务,不在同一个注册中心,那么此时就需要使用一个url来指定被调用的服务的地址,如果在同一个注册中心,那么不建议使用,因为既然在同一个注册中心,还用url干嘛?那不是和注册中心的理念冲突了么
NOTE:当name与url都存在时,feign会认为这是第三方服务,和你不在同一个注册中心,所以优先使用url

@FeignClient(name="被调用的那个服务在eureka中的名字",value="就是name,它俩一样",url="http://localhost:1234/aaa")
public interface MyInterface{
	//此处相当于访问http://localhost:1234/aaa/m1?p1=xxxx
	//注意:c1是controller的映射,m1是方法映射,而上面的aaa是项目名
	@RequestMapping("/c1/m1")
	public String method1(@RequestParam("p1") String p1);
	//*****注意此处User,挺有意思的,被调用的服务哪怕返回的不会User类,只要字段名字一样,
	//值就会传递过来,网上有例子写实现Seralizable接口,全限定名一样什么的,纯属没有任何用,
	//spring是使用jackson直接json转换的
	@RequestMapping("/c1/m2")
	public User method1(@RequestParam("p1") String p1);
	//*****注意:以下方式摘自网上,我没有亲自试验过,但是觉得可行,所以我就复制过来了
    @RequestLine("GET /user/index")//feign独有的注解方式 
    String index();
    @RequestMapping(value = "/get0/{id}", method = RequestMethod.GET)
    User findById(@PathVariable("id") Long id);
    @RequestMapping(value = "/get1", method = RequestMethod.GET)
    User get1(@RequestParam("id") Long id, @RequestParam("name") String name);
    @RequestMapping(value = "/get2", method = RequestMethod.GET)
    User get2(@RequestParam Map<String, Object> map);
    @RequestMapping(value = "/hello2", method=RequestMethod.GET)
    User hello2(@RequestHeader("name") String name, @RequestHeader("age") Integer age);
    @RequestMapping(value = "/hello3", method=RequestMethod.POST)
    String hello3(@RequestBody User user);
    //****************摘抄结束************

4.哪里需要调用,哪里就直接@Autowired,比如在某个Service中使用就

@Service
public class MyService{
	@Autowired
	MyInterface myInterface;
}

Feign简介

Feign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的),是以Java接⼝注解的⽅式调⽤Http请求,⽽不⽤像Java中通过封装HTTP请求报⽂的⽅式直接调⽤,Feign被⼴泛应⽤在Spring Cloud 的解决⽅案中。类似于Dubbo,服务消费者拿到服务提供者的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。

Feign可帮助我们更加便捷,优雅的调⽤HTTP API:不需要我们去拼接url然后调⽤restTemplate的api,在SpringCloud中,使⽤Feign⾮常简单,创建⼀个接⼝(在消费者–服务调⽤⽅这⼀端),并在接⼝上添加⼀些注解,代码就完成了。

SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解(OpenFeign),本质:封装了Http调⽤流程,更符合⾯向接⼝化的编程习惯,类似于Dubbo的服务调⽤,Dubbo的调⽤⽅式其实就是很好的⾯向接⼝编程。