标签:场景 服务 OpenFeign springcloud payment id Client common public
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
话不多说,直接上代码完事了:
- common模块定义ClientApi:
@RequestMapping("/storage/historyData")
public interface HistoryDataApi {
@PostMapping("/listHistoryDatas")
List<HistoryDataDTO> listHistoryDatas(@RequestBody HistoryDataSearch historyDataSearch);
}
- 生产者服务去实现该接口:
@RestController
public class HistoryDataController implements HistoryDataApi {
@Autowired
private IHistoryDataService iHistoryDataService;
@Override
public List<HistoryDataDTO> listHistoryDatas(HistoryDataSearch historyDataSearch) {
return iHistoryDataService.listHistoryDatas(historyDataSearch);
}
}
- 消费者服务创建Client接口去继承ClientApi:
@FeignClient("cloud-payment-service")
public interface HistoryDataClient extends HistoryDataApi {
}
总结
具体3种使用情况,看个人项目的情况决定,这种东西说不准的
标签:场景,服务,OpenFeign,springcloud,payment,id,Client,common,public 来源: https://www.cnblogs.com/ibcdwx/p/16081344.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。