• springcloudOpenFeign在实际工作使用场景


    OpenFeign在实际工作使用场景

    本来在实际工作接触微服务项目使用到openfeign,不同的项目可能有不同的使用方式,下面是3种常见的使用场景

    使用场景1:在各自的微服务定义Client

    在各自的微服务定义Client,什么意思呢?
    比如说目前有3个微服务,A,B服务是消费者,C服务是生产者。A和B都要去调用C的 interface1 接口,于是各自在自己项目里创建一个Client类,来达到目的。
    1. 好处:各服务的开发人员的耦合性降低,不需要去管其他微服务是否也调用interface1 接口
    2. 坏处:代码出现冗余
    大致的Client类代码如下:

    @FeignClient("cloud-payment-service")
    @Component
    public interface PaymentClient {
        @GetMapping("/payment/get/{id}")
        public CommonResult getPaymentById(@PathVariable("id") Long id);
    }
    

    使用场景2:在common模块定义Client

    在common模块定义Client,恰好是解决代码出现冗余的情况,其他微服务只需要引入common模块就可以,达到共用Client的目的,大致代码如下:

    @Component
    @FeignClient("cloud-payment-service")
    public interface PaymentApi {
        @GetMapping("/payment/get/{id}")
        public CommonResult getPaymentById(@PathVariable("id") Long id);
    }
    

    生产者服务接口:

    @RestController
    @Slf4j
    public class PaymentController {
    
        private DiscoveryClient discoveryClient;//获取注册中心上面的多个服务信息
    
        @GetMapping("/payment/get/{id}")
        public CommonResult getPaymentById(@PathVariable("id") Long id) {
            ....
        }
    }
    

    和场景1的不同点在于所属模块的位置不一样而已,这种比较好点。

    使用场景3:在common模块定义ClientApi,然后消费者继承ClientAPi,生产者服务实现ClientAPi

    话不多说,直接上代码完事了:

    1. common模块定义ClientApi:
    @RequestMapping("/storage/historyData")
    public interface HistoryDataApi {
        @PostMapping("/listHistoryDatas")
        List<HistoryDataDTO> listHistoryDatas(@RequestBody HistoryDataSearch historyDataSearch);
    }
    
    1. 生产者服务去实现该接口:
    @RestController
    public class HistoryDataController implements HistoryDataApi {
    
        @Autowired
        private IHistoryDataService iHistoryDataService;
    
        @Override
        public List<HistoryDataDTO> listHistoryDatas(HistoryDataSearch historyDataSearch) {
            return iHistoryDataService.listHistoryDatas(historyDataSearch);
        }
    }
    
    1. 消费者服务创建Client接口去继承ClientApi:
    @FeignClient("cloud-payment-service")
    public interface HistoryDataClient extends HistoryDataApi {
    }
    

    总结

    具体3种使用情况,看个人项目的情况决定,这种东西说不准的

  • 相关阅读:
    接口测试工具 — jmeter(关联)
    接口测试工具 — jmeter(参数化)
    接口测试工具 — jmeter(header与cookie的添加)
    【多态】重写与重载的区别
    【面试】软件测试面试题
    【Jenkins】testng+testNgXslt+ant优化测试报告
    【ANT】输入中文格式为乱码
    【Sql】经典sql语句
    【log4j】使用注意事项
    【问题】用ant编译时,提示编码utf为不可映射字符
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/16081344.html
Copyright © 2020-2023  润新知