010 SpringCloud 学习笔记6-----Feign
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的更多相关文章
- SpringCloud学习笔记(3):使用Feign实现声明式服务调用
简介 Feign是一个声明式的Web Service客户端,它简化了Web服务客户端的编写操作,相对于Ribbon+RestTemplate的方式,开发者只需通过简单的接口和注解来调用HTTP API ...
- SpringCloud学习笔记(4):Hystrix容错机制
简介 在微服务架构中,微服务之间的依赖关系错综复杂,难免的某些服务会出现故障,导致服务调用方出现远程调度的线程阻塞.在高负载的场景下,如果不做任何处理,可能会引起级联故障,导致服务调用方的资源耗尽甚至 ...
- SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据
简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控.本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化. 项目介绍 sc ...
- SpringCloud学习笔记:服务支撑组件
SpringCloud学习笔记:服务支撑组件 服务支撑组件 在微服务的演进过程中,为了最大化利用微服务的优势,保障系统的高可用性,需要通过一些服务支撑组件来协助服务间有效的协作.各个服务支撑组件的原理 ...
- SpringCloud学习笔记(2):使用Ribbon负载均衡
简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...
- SpringCloud学习笔记(6):使用Zuul构建服务网关
简介 Zuul是Netflix提供的一个开源的API网关服务器,SpringCloud对Zuul进行了整合和增强.服务网关Zuul聚合了所有微服务接口,并统一对外暴露,外部客户端只需与服务网关交互即可 ...
- SpringCloud学习笔记(7):使用Spring Cloud Config配置中心
简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...
- SpringCloud学习笔记(六、SpringCloud Netflix Feign)
目录: feign简介 feign应用 feign简介: feign是一款Netflix开源的声明式.模板化的http客户端,它可以更加便捷.优雅的调用http api:SpringCloud对Net ...
- SpringCloud学习笔记(七):Hystrix断路器
概述 什么时候需要断路器?熔断? 举个简单的例子:小明喜欢小美,可是小美没有电话,小美给了小明家里的座机,小明打给座机,这个时候小美的妈妈接到了,小明怕妈妈知道自己喜欢小美,就跟小美妈妈说让小美哥接电 ...
随机推荐
- LeetCode 1197. Minimum Knight Moves
原题链接在这里:https://leetcode.com/problems/minimum-knight-moves/ 题目: In an infinite chess board with coor ...
- solidworks 学习 (二)
洗手液瓶建模
- Numpy | 16 算术函数
加减乘除 NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide(). 注意:数组必须具有相同的形状或符合数组广播规则. import nu ...
- 新手AS常见问题集锦
开发环境 以前开发android的时候可以使用eclipse,虽然现在也能使用eclipse,但是google已经不再支持使用eclipse开发android了.因为google有了自己的IDE--- ...
- Macbook Pro 键盘触摸板失灵,只有电源键有反应 修复手札
上次说到换完电池后键盘和触摸板就没反应了,只好硬着头皮把所有的元件一个个拆下来试. 经过3天的测试(试了网上所有能找到的办法,最多的就是重置smc和nvmp),最终确定故障应该在触摸板排线上. 没有废 ...
- docker时区问题
解决: dockerfile: RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#update application timezoneR ...
- Waring:not all local change may be shown due to an error:fatal
idea往Git上提交文件时提示 Waring:not all local change may be shown due to an error:fatal 解决方案:选择File --> s ...
- dateTime格式转换
select Convert(varchar(8),GETDATE(),112) Select replace(CONVERT(varchar(8), GETDATE(), 108),':','')
- 微信小程序 input 的 type属性 text、number、idcard、digit 区别
微信小程序的 input 有个属性叫 type,这个 type 有几个可选值: text:不必解释 number:数字键盘(无小数点) idcard:数字键盘(无小数点.有个 X 键) digit:数 ...
- 【C++】C++的拷贝控制
目录结构: contents structure [-] 拷贝.赋值与销毁 拷贝构造函数 拷贝初始化 参数和返回值 拷贝赋值运算符 析构函数 三五法则 拷贝控制和资源管理 交换操作 对象移动 右值引用 ...