1.定制设计负载均衡源码
2.新⼀定制设计代负载均衡组件Open-Feign
- 原先ribbon定制设计代码存在的问题:不规范,⻛格不统⼀,维护
性⽐较差 - 什么是Feign
SpringCloud提供的伪http客户端(本质还是⽤http),封装了Http调⽤流程,更适合⾯向接⼝化让⽤Java接⼝注解的⽅式调⽤Http请求.不⽤像Ribbon中通过封装HTTP请求报⽂的⽅式调⽤ Feign默认集成了Ribbon - Nacos⽀持Feign,可以直接集成实现负载均衡的效果
3.集成实现远程⽅法调⽤
- 加⼊依赖
<!--引入feign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
- 1
- 2
- 3
- 4
- 5
- 配置注解
启动类增加 @EnableFeignClients
- 1
- 增加⼀个接⼝
//服务名称记得和nacos保持⼀样@FeignClient(name="xdclass-video-service")public interface VideoService { @GetMapping(value = "/api/v1/video/find_by_id") Video findById(@RequestParam("videoId") int videoId); //订单服务这边 @PostMapping(value = "/api/v1/video/save") int saveVideo(@RequestBody Video video);}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 修改Controller
@RestController@RequestMapping("api/v1/video_order")public class OrderController { @Autowired private RestTemplate restTemplate; @Autowired private DiscoveryClient discoveryClient; @Autowired private VideoService videoService; @RequestMapping("find_by_id") public Object findById(int videoId){ //Video video = restTemplate.getForObject("http://localhost:9000/api/v1/video/find_by_id?videoId="+videoId, Video.class); //List<ServiceInstance> list = discoveryClient.getInstances("xdclass-video-service"); //ServiceInstance serviceInstance = list.get(0); //Video video = restTemplate.getForObject("http://xdclass-video-service/api/v1/video/find_by_id?videoId="+videoId, Video.class); Video video = videoService.findById(videoId); VideoOrder videoOrder = new VideoOrder(); videoOrder.setVideoId(video.getId()); videoOrder.setVideoTitle(video.getTitle()); videoOrder.setCreateTime(new Date()); videoOrder.setServerInfo(video.getServerInfo()); return videoOrder; } @PostMapping("save") public Object save(@RequestBody Video video){ int rows = videoService.saveVideo(video); Map map = new HashMap<>(); map.put("rows",rows); return map; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- Ribbon和feign两个的区别和选择
选择feign
默认集成了ribbon
写起来更加思路清晰和⽅便
采⽤注解⽅式进⾏配置,配置熔断等⽅式⽅便