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-servercloud:nacos:discovery:server-addr: localhost:8848namespace: 2a57e550-6295-4269-b1b4-268c46021020# 不适用ribbonloadbalancer:ribbon:enabled: false
配置loadBalanced 的bean
@Configurationpublic class RestConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}
在controller 层进行调用测试
@RequestMapping(value = "/findOrderByUserId/{id}")public R findOrderByUserId(@PathVariable("id") Integer id) {log.info("根据userId:" + id + "查询订单信息");// 添加@LoadBalancedString 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
@BeanWebClient webClient(){return WebClient.builder().build();}
在UserController 中使用
@Autowiredprivate 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 使用
@Autowiredprivate ReactorLoadBalancerExchangeFilterFunction lbfilter;@GetMapping(value = "/findOrderByUserIdWithWebFlux/{id}")public Mono<R> findOrderByUserIdWithWebFlux(@PathVariable("id")Integer id){String url = "http://order-server/order/findOrderByUserId/"+id;// 基于WebClient + webFluxMono<R> result = WebClient.builder().filter(lbfilter).build().get().uri(url).retrieve().bodyToMono(R.class);return result;}
测试,验证

文章转载自李二狗搞程序,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




