1.概述

Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。

2.入门案例

改造lucky-service-consumer模块

(1)导入依赖

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

(2)开启Feign功能

我们在启动类上,添加@EnableFeignClients 注解,开启Feign功能

删除RestTemplate:feign已经自动集成了Ribbon负载均衡的RestTemplate。所以,此处不需要再注册RestTemplate。

修改后代码:

package lucky.service;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.openfeign.EnableFeignClients; @SpringCloudApplication
@EnableFeignClients // 开启feign客户端
public class LuckyServiceConsumerApplication { public static void main(String[] args) {
SpringApplication.run(LuckyServiceConsumerApplication.class, args);
} }

(3)Feign的客户端

在lucky-service-consumer模块中,添加UserClient接口:

package lucky.service.client;

import lucky.service.domain.Users;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; /**
* value = "SERVICE-PROVIDER" 这里的"SERVICE-PROVIDER"是Eureka 注册中心中的要调用的服务应用名
* @RequestMapping(path = "/users/queryUsersById") 这里的“getMsg”是要调用的服务应用里的相应的方法
* 注意:如果SERVICE-PROVIDER服务下面的访问路径是 /users/queryUsersById ,则这里也要写"/users/queryUsersById)
* public Users queryUserById(@RequestParam("id") Integer id); 方法完全复制UserController中的方法,方法名可以修改(即方法名可以自定义)
*/
@FeignClient(value = "SERVICE-PROVIDER")
public interface UserClient { @RequestMapping(path = "/users/queryUsersById")
public Users queryUserById(@RequestParam("id") Integer id);
}

注意:

* value = "SERVICE-PROVIDER" 这里的"SERVICE-PROVIDER"是已在Eureka 注册中心注册的要调用的服务应用名
* @RequestMapping(path = "/users/queryUsersById") 这里的“getMsg”是要调用的服务应用里的相应的方法
* 注意:如果SERVICE-PROVIDER服务下面的访问路径是 /users/queryUsersById ,则这里也要写"/users/queryUsersById)
* public Users queryUserById(@RequestParam("id") Integer id); 方法完全复制UserController中的方法,方法名可以修改(即方法名可以自定义)

(4)UserController.java

修改UserController,调用UserClient接口:

package lucky.service.controller;

import lucky.service.client.UserClient;
import lucky.service.domain.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate; import javax.annotation.Resource;
import java.util.List; /**
* 逻辑分析:浏览器中输入http://localhost:8080/consumer/user/queryUsersById?id=2
* url中:/consumer/user 对应类上注解的路径
* url中:/queryUsersById 对应方法路径
* 调用userClient向服务端发请求
*/
@Controller
@RequestMapping(path = "/consumer/user")
public class UserController { @Autowired
private UserClient userClient; @RequestMapping(path = "/queryUsersById")
@ResponseBody
public Users queryUserById(@RequestParam("id") Integer id){
Users users = this.userClient.queryUserById(id);
return users;
}
}

(5)测试结果

010 SpringCloud 学习笔记6-----Feign的更多相关文章

  1. SpringCloud学习笔记(3):使用Feign实现声明式服务调用

    简介 Feign是一个声明式的Web Service客户端,它简化了Web服务客户端的编写操作,相对于Ribbon+RestTemplate的方式,开发者只需通过简单的接口和注解来调用HTTP API ...

  2. SpringCloud学习笔记(4):Hystrix容错机制

    简介 在微服务架构中,微服务之间的依赖关系错综复杂,难免的某些服务会出现故障,导致服务调用方出现远程调度的线程阻塞.在高负载的场景下,如果不做任何处理,可能会引起级联故障,导致服务调用方的资源耗尽甚至 ...

  3. SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

    简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控.本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化. 项目介绍 sc ...

  4. SpringCloud学习笔记:服务支撑组件

    SpringCloud学习笔记:服务支撑组件 服务支撑组件 在微服务的演进过程中,为了最大化利用微服务的优势,保障系统的高可用性,需要通过一些服务支撑组件来协助服务间有效的协作.各个服务支撑组件的原理 ...

  5. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  6. SpringCloud学习笔记(6):使用Zuul构建服务网关

    简介 Zuul是Netflix提供的一个开源的API网关服务器,SpringCloud对Zuul进行了整合和增强.服务网关Zuul聚合了所有微服务接口,并统一对外暴露,外部客户端只需与服务网关交互即可 ...

  7. SpringCloud学习笔记(7):使用Spring Cloud Config配置中心

    简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...

  8. SpringCloud学习笔记(六、SpringCloud Netflix Feign)

    目录: feign简介 feign应用 feign简介: feign是一款Netflix开源的声明式.模板化的http客户端,它可以更加便捷.优雅的调用http api:SpringCloud对Net ...

  9. SpringCloud学习笔记(七):Hystrix断路器

    概述 什么时候需要断路器?熔断? 举个简单的例子:小明喜欢小美,可是小美没有电话,小美给了小明家里的座机,小明打给座机,这个时候小美的妈妈接到了,小明怕妈妈知道自己喜欢小美,就跟小美妈妈说让小美哥接电 ...

随机推荐

  1. PostgreSQL 慢查询SQL跟踪

    PostgreSQL 开启慢SQL捕获在排查问题时是个很有效的手段.根据慢SQL让我在工作中真正解决了实际问题,很有帮助. PostgreSQL 日志支持的输出格式有 stderr(默认).csvlo ...

  2. linux学习14 Linux运维高级系统应用-glob通配及IO重定向

    一.回顾 1.bash基础特性:命令补全,路径补全,命令引用 2.文件或目录的复制,移动及删除操作 3.变量:变量类型 存储格式,数据表示范围,参与运算 二.bash的基础特性 1.globbing: ...

  3. 封装好的observer.js,用于非父子组件传值,直接调用$on和$emit方法

    const eventList = {} const $on = (eventName,callback)=>{ if(!eventList[eventName]){ eventList[eve ...

  4. luogu P1724 东风谷早苗

    二次联通门 : luogu P1724 东风谷早苗 /* luogu P1724 东风谷早苗 模拟即可 手抖 Y-- 打成 Y++ WA了两发.. */ #include <cstring> ...

  5. cogs 997. [東方S2] 射命丸文

    二次联通门 : cogs 997. [東方S2] 射命丸文 /* cogs 997. [東方S2] 射命丸文 二维前缀和 枚举每个子矩阵 更新最大值.. 莫名rank1 */ #include < ...

  6. Vue中的native修饰符解析

    native修饰符 一般来说,vue本身提供了v-on:eventName这个语法来提供vue的时事件绑定,通常使用@eventName这个语法糖代替上述语法. 使用过程中没有考虑@eventName ...

  7. React-HelloWorld

    React-HelloWorld 最简单的React示例如下: ReactDOM.render( <h1>Hello,world!</h1>, document.getelem ...

  8. python 判断元素是否在一个列表中

    import random val= data=[,,,,] : find=False val=int(input('请输入查找键值(1-9),输入-1离开:')) for i in data: if ...

  9. 经典算法(一) top k

    问题:1亿数据中,找出最大的k个数,要求使用内存不超过1m (延伸问题:1亿数据中,找出重复出现次数最多的k个,要求使用内存不超过1m 等) 分析: 1亿数字(int)占内存:100000000 * ...

  10. JS字符串转换为JSON的四种方法

    转自:https://www.cnblogs.com/hgmyz/p/7451461.html 1.jQuery插件支持的转换方式:  示例: $.parseJSON( jsonstr ); //jQ ...