定制设计第五章 负载均衡进阶之 Ribbon和Feign实战

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
    写起来更加思路清晰和⽅便
    采⽤注解⽅式进⾏配置,配置熔断等⽅式⽅便
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发