1.Ribbon负载均衡源码

2.微服务新⼀代负载均衡组件Open-Feign

原先ribbon代码存在的问题:不规范,⻛格不统⼀,维护 性⽐较差什么是Feign SpringCloud提供的伪http客户端(本质还是⽤http),封装了Http调⽤流程,更适合⾯向接⼝化让⽤Java接⼝注解的⽅式调⽤Http请求.不⽤像Ribbon中通过封装HTTP请求报⽂的⽅式调⽤ Feign默认集成了RibbonNacos⽀持Feign,可以直接集成实现负载均衡的效果

3.集成Feign实现远程⽅法调⽤

加⼊依赖

org.springframework.cloud

spring-cloud-starter-openfeign

配置注解

启动类增加 @EnableFeignClients

增加⼀个接⼝

//服务名称记得和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);

}

修改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 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;

}

}

Ribbon和feign两个的区别和选择 选择feign 默认集成了ribbon 写起来更加思路清晰和⽅便 采⽤注解⽅式进⾏配置,配置熔断等⽅式⽅便

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: