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
    

    说明调用成功。

  • 相关阅读:
    《软件安全系统设计最佳实践》课程大纲
    《基于IPD流程的成本管理架构、方法和管理实践》培训大纲
    《技术规划与路标开发实践 》内训在芜湖天航集团成功举办!
    年终总结,究竟该写什么?
    Docker安装RabbitMQ
    Ubuntu18安装docker
    Ubuntu18.04安装MySQL
    Windows常用CMD命令
    ping不通域名的问题OR请求找不到主机-问题
    JMeter 函数用法
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/13496924.html
Copyright © 2011-2022 走看看