目录
集成Open-Feign实现远程方法调用
加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启动类添加注解
调用方,我是order
//开启Feign支持
@EnableFeignClients
远程调用video代码
新建service通过Feign调用nacos的服务
//name="class-video-service" 引号里就是在nacos里被调用方的服务名
@FeignClient(name="class-video-service")
public interface VideoService {
@GetMapping(value = "/api/v1/video/find_by_id")
Video findById(@RequestParam("videoId") int videoId);
}
controller代码
不需要像以前使用Ribbon restTemplate 那么麻烦,直接调用service即可,因为service会去nacos寻找需要调用的服务
@RestController
@RequestMapping("api/v1/video_order")
public class OrderController {
@Autowired
private VideoService videoService;
@RequestMapping("/save")
public Object save(int videoId){
//法四,使用Fiegn进行远程调用
// Video video = restTemplate.getForObject("http://class-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());
//这时候就可以从video那里获得ip和端口号
videoOrder.setServerInfo(video.getServeInfo());
return videoOrder;
}
}
Open-Feign使用post方法实现远程传输
被调用的videoCon
@PostMapping("save1")
public Object save1(@RequestBody Video video){
System.out.println(video.getTitle());
return video;
}
调用的Order
service
@PostMapping(value = "/api/v1/video/save1")
int save1(@RequestBody Video video);
OrderCon
@RequestMapping("/save1")
public Object save1(@RequestBody Video video){
System.out.println(video.getTitle());
return video;
}
这时候调用/api/v1/video_order/save1 json格式传个title就会发现传参成功了