zoukankan      html  css  js  c++  java
  • 服务消费之Feign

    一、Feign

    1.1 Feign 介绍

    Feign 是一个声明式的Web Service客户端,它使得编写 Web Serivce 客户端变得更加简单。我们只需要使用Feign 来创建一个接口并用注解来配置它既可完成。它具备可插拔的注解支持,包括 Feign注解和 JAX-RS 注解。Feign 也支持可插拔的编码器和解码器。Spring CloudFeign 增加了对 Spring MVC 注解的支持,还整合了RibbonEureka 来提供负载均衡的HTTP客户端实现。

    1.2 FeignClient注解属性

    属性名 默认值 作用 备注
    value 空字符串 调用服务名称,和name属性相同
    serviceId 空字符串 服务id,作用和name属性相同 已过期
    name 空字符串 调用服务名称,和value属性相同
    url 空字符串 全路径地址或hostname,http或https可选
    decode404 false 配置响应状态码为404时是否应该抛出FeignExceptions
    configuration {} 自定义当前feign client的一些配置 参考FeignClientsConfiguration
    fallback void.class 熔断机制,调用失败时,走的一些回退方法,可以用来抛出异常或给出默认返回数据。 底层依赖hystrix,启动类要加上@EnableHystrix
    path 空字符串 自动给所有方法的requestMapping前加上前缀,类似与controller类上的requestMapping
    primary true

    二、Feign 简单使用

    注:基于 SpringCloud之项目初始化 之上操作。

    1. OrderService 模块中添加 Feign 依赖
    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
    1. 启用 Feign 注解
    @EnableFeignClients
    @EnableDiscoveryClient
    @SpringBootApplication
    public class OrderServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderServiceApplication.class, args);
        }
    
    }
    
    1. 创建 PriceService 接口
    @FeignClient(value = "PRICE-SERVICE", path = "/price")
    public interface PriceService {
    
        @RequestMapping(value = "/getPrice/{productId}", method = RequestMethod.GET)
        BigDecimal getPrice(@PathVariable("productId")String productId);
    
    }
    

    可以看到相当于是一个和 PriceService 访问的契约。

    1. 修改 OrderController 调用逻辑
    @RestController
    @RequestMapping("/order")
    public class OrderController {
    
        private final PriceService priceService;
    
        public OrderController(PriceService priceService) {
            this.priceService = priceService;
        }
    
        @GetMapping("/getPrice")
        public BigDecimal getPrice(String productId) {
            final BigDecimal price = priceService.getPrice(productId);
            return price;
        }
    
    }
    

    5)运行 OrderService 服务,访问 http://localhost:8005/order/getPrice?productId=123 ,返回:

    100
    

    说明调用成功。

  • 相关阅读:
    day55---前端基础之BOM操作和DOM操作
    每日作业5/8
    数据库之索引
    数据库之视图、触发器、事务、存储过程、内置函数、流程控制
    每日作业5/7
    数据备份与pymysql模块
    Navicat与MySQL使用
    每日作业5/6
    数据库之多表查询
    数据库之单表查询
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/13496924.html
Copyright © 2011-2022 走看看