1.Open Feign 是什么
Feign 是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。
使用方法:定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码和解码器。Spring Cloud 对Feign进行了封装,使其支持了SpringMvc 标准注解和HttpMessageConversters。也可以与Eureka Ribbon组合使用支持负载均衡
2.能用来做什么
在使用Ribbon+RestTemplate 时利用RestTemplate 对Http请求的封装处理形成了一套模板化的调用方法。在实际开发中对服务的依赖调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。
Feign对此进行了封装,由它来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,只需要创建一个接口并使用注解的方式来配置它,简化了开发量
3.怎么用
1.建立Model
cloud-consumer-feign-order80
Feign一般在消费端使用
2.Pom文件
<dependencies>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.atguigu.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般基础通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.Yml配置文件
server:
port: 80
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
4.启动类
// 要记得打开FeignClients
@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80
{
public static void main(String[] args)
{
SpringApplication.run(OrderFeignMain80.class,args);
}
}
5.业务类
新增PaymentFeignService 接口 添加 @FeignClient 注解
@Component
@FeigenClient(Value = " CLOUD-PAYMENT-SERVICE")
pubulic interface PaymentFeignService{
@GetMapping(Value = "/payment/get/{id}")
CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
}
Controller控制层是被调用处
@RestController
public class OrderFeignController
{
@Resource
private PaymentFeignService paymentFeignService;
@GetMapping(value = "/consumer/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id)
{
return paymentFeignService.getPaymentById(id);
}
}
更像是将服务端注册到本地直接调用