当前位置:网站首页>OpenFeign实现负载均衡
OpenFeign实现负载均衡
2022-07-30 03:25:00 【Leon_Jinhai_Sun】
Feign和RestTemplate一样,也是HTTP客户端请求工具,但是它的使用方式更加便捷。首先是依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>接着在启动类添加@EnableFeignClients注解:
@SpringBootApplication
@EnableFeignClients
public class BorrowApplication {
public static void main(String[] args) {
SpringApplication.run(BorrowApplication.class, args);
}
}那么现在我们需要调用其他微服务提供的接口,该怎么做呢?我们直接创建一个对应服务的接口类即可:
@FeignClient("userservice") //声明为userservice服务的HTTP请求客户端
public interface UserClient {
}接着我们直接创建所需类型的方法,比如我们之前的:
RestTemplate template = new RestTemplate();
User user = template.getForObject("http://userservice/user/"+uid, User.class);现在可以直接写成这样:
@FeignClient("userservice")
public interface UserClient {
//路径保证和其他微服务提供的一致即可
@RequestMapping("/user/{uid}")
User getUserById(@PathVariable("uid") int uid); //参数和返回值也保持一致
}接着我们直接注入使用(有Mybatis那味了):
@Resource
UserClient userClient;
@Override
public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
List<Borrow> borrow = mapper.getBorrowsByUid(uid);
User user = userClient.getUserById(uid);
//这里不用再写IP,直接写服务名称bookservice
List<Book> bookList = borrow
.stream()
.map(b -> template.getForObject("http://bookservice/book/"+b.getBid(), Book.class))
.collect(Collectors.toList());
return new UserBorrowDetail(user, bookList);
}访问,可以看到结果依然是正确的:

并且我们可以观察一下两个用户微服务的调用情况,也是以负载均衡的形式进行的。
按照同样的方法,我们接着将图书管理服务的调用也改成接口形式:

最后我们的Service代码就变成了:
@Service
public class BorrowServiceImpl implements BorrowService {
@Resource
BorrowMapper mapper;
@Resource
UserClient userClient;
@Resource
BookClient bookClient;
@Override
public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
List<Borrow> borrow = mapper.getBorrowsByUid(uid);
User user = userClient.getUserById(uid);
List<Book> bookList = borrow
.stream()
.map(b -> bookClient.getBookById(b.getBid()))
.collect(Collectors.toList());
return new UserBorrowDetail(user, bookList);
}
}继续访问进行测试:

OK,正常。
当然,Feign也有很多的其他配置选项,这里就不多做介绍了,详细请查阅官方文档。
边栏推荐
猜你喜欢

【ModelArts系列】华为ModelArts训练yolov3模型(训练管理)

【基于RT-Thread+RA6M4的智能鱼缸系统设计之鱼我所欲也】

Awesome, Tencent technical experts handed Redis technical notes, and the download volume has exceeded 30W

软件测试面试题及答案解析,2022最强版

OA项目之待开会议&历史会议&所有会议

FL Studio官方20.9中文版无需汉化补丁,正确安装并设置切换

厉害,腾讯技术专家手撸Redis技术笔记,下载量已突破30W

leetcode每天5题-Day01

【高性能计算】openMP

联邦学习综述(二)——联邦学习的分类、框架及未来研究方向
随机推荐
Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集简介、下载、使用方法(包括数据增强)之详细攻略
JIT VS AOT
Ansible简介(详细)特性+优点+设计理念+应用领域+系统架构+工作原理+任务执行流程
答对这3个面试问题,薪资直涨20K
First acquaintance with the web
【ModelArts系列】华为ModelArts训练yolov3模型(训练管理)
YOLOv7的一些理解
开放地址法哈希实现——二次探测法
Open address method hash implementation - linear detection method
WPF 学习笔记《WPF布局基础》
软件测试面试题及答案解析,2022最强版
QT based on the third day (3) widget, dialog and mainwindow
CF1473C No More Inversions
nSoftware.PowerShell.Server.2020
Overview of Federated Learning (1) - Background, Definition and Value of Federated Learning
SQLSERVER将子查询数据合并拼接成一个字段
sublime text 3 设置
动态绑定href url
测试人员,除了测试还得会点什么
redis的学习_基础部分