RestTemplate 整合 LoadBalancer
项目 studyuser 添加loadBalancer 依赖 , 在nacos服务注册 上去除
netflix-ribbon 的支持
<!-- 添加loadBalancer 负载均衡器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
复制
<!-- nacos服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
复制
在yml 上禁用ribbon , 其实你不引用ribbon 应该也行
spring:
application:
name: user-server
cloud:
nacos:
discovery:
server-addr: localhost:8848
namespace: 2a57e550-6295-4269-b1b4-268c46021020
# 不适用ribbon
loadbalancer:
ribbon:
enabled: false
复制
配置loadBalanced 的bean
@Configuration
public class RestConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
复制
在controller 层进行调用测试
@RequestMapping(value = "/findOrderByUserId/{id}")
public R findOrderByUserId(@PathVariable("id") Integer id) {
log.info("根据userId:" + id + "查询订单信息");
// 添加@LoadBalanced
String url = "http://order-server/order/findOrderByUserId/" + id;
R result = restTemplate.getForObject(url, R.class);
return result;
}
复制
测试结果
2021-08-04 11:28:22.568 INFO 18236 --- [nio-8010-exec-1] c.jiuge.user.controller.UserController : 根据userId:2查询订单信息
2021-08-04 11:28:24.341 INFO 18236 --- [nio-8010-exec-2] c.jiuge.user.controller.UserController : 根据userId:2查询订单信息
复制
WebClient 整合 LoadBalancer
引入依赖
<!-- 添加webflux 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
复制
配置webClient作为负载均衡器的client
@Bean
WebClient webClient(){
return WebClient.builder().build();
}
复制
在UserController 中使用
@Autowired
private WebClient webClient;
@RequestMapping(value = "/findOrderByUserId/{id}")
public Mono<R> findOrderByUserId(@PathVariable("id") Integer id) {
log.info("根据userId:" + id + "查询订单信息");
String url = "http://localhost:8020/order/findOrderByUserId/"+id;
Mono<R> result = webClient.get().uri(url).retrieve().bodyToMono(R.class);
return result;
}
复制
测试,验证
使用WebClient 结合 WebFlux 使用
@Autowired
private ReactorLoadBalancerExchangeFilterFunction lbfilter;
@GetMapping(value = "/findOrderByUserIdWithWebFlux/{id}")
public Mono<R> findOrderByUserIdWithWebFlux(@PathVariable("id")Integer id){
String url = "http://order-server/order/findOrderByUserId/"+id;
// 基于WebClient + webFlux
Mono<R> result = WebClient.builder().filter(lbfilter).build().get().uri(url).retrieve().bodyToMono(R.class);
return result;
}
复制
测试,验证
文章转载自李二狗搞程序,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
2338次阅读
2025-04-09 15:33:27
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1081次阅读
2025-04-27 16:53:22
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
672次阅读
2025-04-10 15:35:48
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
540次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
517次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
476次阅读
2025-04-07 09:44:54
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
448次阅读
2025-04-30 15:24:06
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
435次阅读
2025-04-17 17:02:24
天津市政府数据库框采结果公布,7家数据库产品入选!
通讯员
409次阅读
2025-04-10 12:32:35
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
349次阅读
2025-04-18 10:01:22