OpenFeign

目录

Feign是什么?

openFeign是什么?

openFeign有什么用?

依赖

使用


Feign是什么?

        Feign是一个基于Java的声明式HTTP客户端,它可以使得编写HTTP客户端变得更加简单和容易。它是Netflix开源的一部分,主要用于简化基于RESTful的服务间通信。

原理

        Feign提供了一种声明式的方式来定义HTTP客户端,我们可以使用类似于Spring MVC中的注解来描述HTTP请求的参数、路径、HTTP方法以及返回值等信息,Feign会根据注解中定义的信息生成对应的HTTP请求,并将请求发送到远程服务。在请求和响应的过程中,Feign会使用内置的编码器和解码器来处理请求和响应的数据,并将响应结果转换为相应的Java对象,使得我们可以方便地将响应结果用于后续的业务流程中。

openFeign是什么?

        OpenFeign是在Feign的基础上扩展而来的,它支持SpringMVC的注解。通过OpenFeign中的@FeignClient注解,可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类。这些实现类在调用其他服务时,会通过OpenFeign的负载均衡器进行负载均衡,从而实现服务的调用。

openFeign有什么用?

服务器之间数据传输,调用远程服务就像调用本地一样简单

        OpenFeign就像一个助手,知道怎么交流、分配任务、避免问题,它可以帮助我们更容易地管理和使用微服务,使得我们的工作更加轻松和高效。

它可以帮助我们更容易地和远程的其他小伙伴(微服务)交流,实现对远程小伙伴的负载均衡,把任务分配给不同的远程小伙伴,提高效率。实现对远程小伙伴的容错处理等等

依赖


    org.springframework.cloud
    spring-cloud-starter-openfeign

使用

在订单系统中调用电影系统的Controller方法

电影系统 控制层

@RequestMapping("movie")
@RestController
public class MovieController {
        @Autowired
        private ITicketDao ticketDao;

        @GetMapping("updateMovieNum/{movieNumber}/{num}")
        public  boolean updateMovieNum(@PathVariable("movieNumber")String movieNumber,
                                       @PathVariable("num")int num){
            TicketEntity ticketEntity= ticketDao.findDistinctByMovieNumber(movieNumber);
            ticketEntity.setSellNum(ticketEntity.getSellNum()+num);
            ticketEntity =ticketDao.save(ticketEntity);
            if(ticketEntity!=null){
                return true;
            }
            return  false;
        }

        @PostMapping("updateMovieNum")
        public  boolean updateMovieNumPost(@RequestBody TicketVo ticketVo){
            TicketEntity ticketEntity= ticketDao.findDistinctByMovieNumber(ticketVo.getMovieNumber());
            ticketEntity.setSellNum(ticketEntity.getSellNum()+ticketVo.getNum());
            ticketEntity =ticketDao.save(ticketEntity);
            if(ticketEntity!=null){
                return true;
            }
            return  false;
        }

}

订单系统控制层 

@RestController
public class OrderController {
    @Autowired
    IRemoteMovieService remoteMovieService;

    @GetMapping("updateMovieGet")
    public void updateMovie(){
        boolean bl=   remoteMovieService.updateMovieNum("10001",5);
        System.out.println(bl);
    }
    
    @GetMapping("updateMoviePost")
    public void updateMoviePost(){
        TicketVo t=new TicketVo();
        t.setMovieNumber("10001");
        t.setNum(3);
        boolean bl=remoteMovieService.updateMovieNumPost(t);
        System.out.println(bl);
    }
}

 定义调用远程服务的方法

  • 这里使用Nacos作为注册和配置中心
//声明一个远程服务调用客户端。name属性指定了远程服务的服务名
@FeignClient(name = "movieSys")
public interface IRemoteMovieService {
    @GetMapping("movie/updateMovieNum/{movieNumber}/{num}")
    public  boolean updateMovieNum(@PathVariable("movieNumber")String movieNumber,
                                   @PathVariable("num")int num);
    @PostMapping("movie/updateMovieNum")
    public  boolean updateMovieNumPost(@RequestBody TicketVo ticketVo);
}

在主程序类上添加注解 开启openFeign功能 

@EnableScheduling//开启定时任务的支持
@EnableFeignClients//开启Feign客户端的支持
@SpringBootApplication
public class OrderMain {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain.class,args);
    }
}

你可能感兴趣的:(Cloud,Computing,OpenFeign,服务器之间数据传输,微服务)