博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springcloud-06-feign的使用
阅读量:5369 次
发布时间:2019-06-15

本文共 3909 字,大约阅读时间需要 13 分钟。

 

 

在 Cloud Netflix栈中,各个都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的RestTemplate。但是,用起来最方便、最优雅的还是要属Feign了。

Feign简介

Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求

 下面写一个feign的实例: 

pom.xml的配置

 

org.springframework.cloud
spring-cloud-starter-feign

启动类添加注解: 

package com.wenbronk.consumer.feign;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.netflix.feign.EnableFeignClients;//import org.springframework.cloud.netflix.eureka.EnableEurekaClient;/** * Created by root on 2017/5/20. */@SpringBootApplication@EnableEurekaClient@EnableFeignClientspublic class MovieFeignApplication {    public static void main(String[] args) {        SpringApplication.run(MovieFeignApplication.class, args);    }}

3, 编写一个feignClient接口, 以实现远程调用

package com.wenbronk.consumer.feign.feignclient;import com.wenbronk.consumer.feign.entity.UserEntity;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;/** * feign的接口 * Created by root on 2017/5/20. */@FeignClient("microservice-provider-user")public interface UserFeignClient {    /**     * 不可以使用 getMapping, 或者postMapping注解     *     * @param id     * @return     * @PathVariable 中 必须有value的值     */    @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)    public UserEntity findById(@PathVariable("id") Long id);    @RequestMapping(value = "/user", method = RequestMethod.POST)    public UserEntity postUser(@RequestBody UserEntity userEntity);    /**     * 这儿不会管呗调用的用什么方法     @PostMapping("/user")     public User postUser(@RequestBody User user) {        return user;     }     */    @RequestMapping(value = "/user", method = RequestMethod.GET)    public UserEntity getUser(UserEntity userEntity);    /**     * 如果被调用的方法是对象, 默认是post请求, 对方不可以是get请求     // 该请求不会成功     @GetMapping("/get-user")     public User getUser(User user) {         return user;     }     * @param userEntity     * @return     */    @RequestMapping(value = "/get-user", method = RequestMethod.GET)    public UserEntity getUserGet(UserEntity userEntity);}

4, 在controller中进行实验

package com.wenbronk.consumer.feign.controller;import com.wenbronk.consumer.feign.entity.UserEntity;import com.wenbronk.consumer.feign.feignclient.UserFeignClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;/** * Created by root on 2017/5/20. */@RestControllerpublic class MovieController {    @Autowired    private UserFeignClient userFeignClient;    @GetMapping("/findUserById/{id}")    public UserEntity findUserById(@PathVariable Long id) {        return userFeignClient.findById(id);    }    @PostMapping("/getUser")    public UserEntity getUser(UserEntity user) {//        return userFeignClient.postUser(user);        return userFeignClient.getUser(user);//        return userFeignClient.getUserGet(user);    }}

  调用的远程服务为: http://www.cnblogs.com/wenbronk/p/6881573.html

中的user服务

 

使用feign遇到的坑:

1, feign接口中, GetMapping, PostMapping不支持, 必须使用RequestMapping

 

2, 使用RestFul请求时, @PathVariables("id"), 和变量同名也必须加 "id"

 

3, 接口中的参数是对象, 默认使用post方法, 不管是否指定 @RequestMapping(method=..)

 

转载于:https://www.cnblogs.com/wenbronk/p/6882353.html

你可能感兴趣的文章
python 多线程就这么简单(转)
查看>>
oracle 简述
查看>>
ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
查看>>
Solr之java实现增删查操作
查看>>
httpClient连接工具类实测可用
查看>>
CDOJ 1965 连通域统计【DFS】
查看>>
飞机大战3-我的飞机
查看>>
c#接口
查看>>
MyEclipse部署Jboss出现java.lang.OutOfMemoryError: PermGen space
查看>>
ZOJ 1133
查看>>
alibaba / zeus 安装 图解
查看>>
Planned Delivery Time as Work Days (SCN discussion)
查看>>
Ubuntu:让桌面显示回收站
查看>>
Android上传头像代码,相机,相册,裁剪
查看>>
git 安装体验
查看>>
Oracle 给已创建的表增加自增长列
查看>>
《DSP using MATLAB》Problem 2.17
查看>>
if 循环
查看>>
uva 111 History Grading(lcs)
查看>>
Python学习week2-python介绍与pyenv安装
查看>>