springcloud关于feign的使用(一个服务通过feign调用另外一个服务)

Feign 英文翻译为:伪装,装作,佯装等等。

Feign 是 Netflix 公司开发的声明式、模板化的 HTTP 客户端, Feign 可以帮助我们更快
捷、优雅地调用 HTTP API。它可以把 Rest 的请求进行隐藏,伪装成类似 SpringMVC 的 Controller 一样。不用再自己拼接 url,拼接参数等等操作。

Spring Cloud Feign 是基于 Netflix feign 实现,整合了 Spring Cloud Ribbon 和 Spring Cloud
Hystrix。

Feign 会通过动态代理,帮我们生成实现类。

示例:
1、本地构建一个Eureka注册中心,项目命名为ca-eureka-server
2、本地构建一个Eureka客户端,项目命名为ca-feign-client,并注册到注册中心ca-eureka-server上。
3、本地构建一个Eureka客户端,项目命名为ca-feign-server,并注册到注册中心ca-eureka-server上。
4、ca-feign-client通过Feign调用ca-feign-server端服务,拿到ca-feign-server返回的信息并打印输出。
ca-feign-client通过Feign调用ca-feign-server

一、ca-feign-client的编写

1.首先将两个客户端ca-feign-client、ca-feign-server分别注册到Eureka注册中心。可以参照本人上一篇文章:“Eureka注册中心实现服务的注册”。
2.ca-feign-client的pom文件中添加Feign依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3.ca-feign-client的启动类上添加feign注解@EnableFeignClients
4.创建一个service包在包里面创建一个接口用作feign接口名称可自定义,并在该接口上添加一个注解@FeignClient(“ca-fegin-server”)括号内为所要请求的服务名称,这里我们是:ca-feign-server;并在接口中自定一个方法,在方法上添加注解 @RequestMapping("/text/getText")//括号内为请求服务的具体方法路径。即被请求项目ca-feign-server中controller中具体方法的地址。效果如图:
@FeignClient("ca-fegin-server")//通过feign请求获取相应服务的数据
public interface userClient {
    @RequestMapping("/text/getText")//请求服务的具体方法
    public String text();//
}
5.编写一个FeignController类需注入刚才的接口,并定义一个方法,我这里就将接收到的数据将数据打印出来。
@RestController
@RequestMapping("/feign")
public class FeignController {

    @Autowired
    private userClient userclient;//注入userClient

    @RequestMapping("/getText")
    public void getMsg() {
        System.out.println("进入getmsg方法");
        String str = userclient.text();//调用接口对应的方法
        System.out.println(str);
    }
}

一、被调用的ca-feign-server服务的编写

1.编写一个TestController类用于接受请求并返回响应,我们这里就简单返回一个字符串。
@RestController
@RequestMapping("/text")
public class TestController {

    @RequestMapping("/getText")
    public String getMsg() {
        String str = "abc";
        return str;
    }
}

2.全部运行之后,访问ca-feign-client服务FeignController类中getMsg() 方法路径就可以了。

执行结果:
在这里插入图片描述


版权声明:本文为Zhumory原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。