• 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种使用情况,看个人项目的情况决定,这种东西说不准的

  • 相关阅读:
    Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(二)
    Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(一)
    学习Make your own neural network 记录(一)
    Python3 爬取Boss直聘网 工作基本信息(数据清洗)
    Python3 爬虫爬取中国图书网(淘书团) 进阶版
    Python3 爬虫爬取中国图书网(淘书团) 记录
    修改Linux最大Socket连接限制
    linux递归删除某个文件夹
    虚拟机安装Linux小技巧
    ext/hash_map 报告过期错误和警告 deprecated or antiquated header
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/16081344.html
Copyright © 2020-2023  润新知