openfeign:服务接口调用
- Feign 使编写Java Http客户端变的更容易。
- 前面在使用Ribbon+RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会对每个服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下我们只需创建一个接口并使用注解方式来配置它(以前是Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务接口的绑定,简化了使用springcloud Ribbon时,自动服务调用客户端的开发量。
- Feign集成了Ribbon
- 利用Ribbon维护了Payment的服务列表信息,并且通过轮询实现了负载均衡。Feign与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。
open feign 依赖Maven坐标
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
配置文件配置 yml:
-------------------------------------------------------------------------------------------------------------------------------
server: port: 80 eureka: client: reister-with-eureka: false # fetchRegistry: true service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/ # 注册地址 # defaultZone: http://localhost:7001/eureka
------------------------------------------------------------------------------------------------------------------------
启动类上加 激活组件:
@SpringBootApplication @EnableFeignClients public class OrderFeignMai80 { /** @EnableFeignClients 启动类上加激活组件 * */ public static void main(String[] args) { SpringApplication.run(OrderFeignMai80.class, args); } }
------------------------------------------------------------------------------------------------------------------------------
接口上加注解
@Component @FeignClient(value = "CLOUD-PAYMENT-SERVICE") public interface PaymentFeignService { @GetMapping(value = "/payment/get/{id}") public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id); }