Spring Cloud入门笔记2(OpenFeign)
场景:
OpenFeign中集成了LoadBalancer,并简化了微服务调用,所以实际上使用该技术
技术栈:OpenFeign
步骤一:导入依赖
<!--openfeign--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
步骤二:配置consul
spring cloud 入门笔记1(RestTemplate,Consul)_resttemplate 写一个工具类-CSDN博客
步骤三:模块间的间接调用
订单模块要去调用支付模块,订单和支付两个微服务,需要通过Api接口解耦,一般不要在订单模块写非订单相关的业务,
自己的业务自己做+其它模块走FeignApi接口调用
@FeignClient(value = "cloud-payment-service") public interface PayFeignApi {@PostMapping("/pay/add")public ResultData addPay(@RequestBody PayDTO payDTO);@GetMapping("/pay/get/{id}")public ResultData getPayInfo(@PathVariable("id") Integer id);@GetMapping(value = "/pay/get/info")public String mylb();@GetMapping(value = "/pay/circuit/{id}")public String myCircuit(@PathVariable("id") Integer id);@GetMapping(value = "/pay/bulkhead/{id}")public String myBulkhead(@PathVariable("id") Integer id); }
提供cloud-payment-service服务的微服务模块中存在对应的方法
订单模块要去调用支付模块,订单和支付两个微服务,需要通过Api接口解耦,一般不要在订单模块写非订单相关的业务,
自己的业务自己做+其它模块走FeignApi接口调用
@RestController @Slf4j public class OrderController {@Resourceprivate PayFeignApi payFeignApi;@PostMapping("/feign/pay/add")public ResultData addOrder(@RequestBody PayDTO payDTO){System.out.println("第一步:模拟本地addOrder新增订单成功(省略sql操作),第二步:再开启addPay支付微服务远程调用");ResultData resultData = payFeignApi.addPay(payDTO);return resultData;} }
注:
@EnableFeignClients//启用feign客户端,定义服务+绑定接口,以声明式发方法调用服务
调用者的启动类上添加注释