<一> :注解 @FeignClient(value = “whhim-wms”, contextId = “DeliveryOrderClient”)
作用:使用Spring Cloud搭建各种微服务之后,服务可以通过@FeignClient使用和发现服务场中的其他服务
注解 @FeignClient介绍:
1)name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
value 同name
2): contextId:当name相同时,存在冲突,此时可以通过contextId来处理。
<二> spring cloud 调用与被调用的一个实例
服务提供者
//name为服务提供者向注册中心注册的实例名
@FeignClient(name = "provider-service" )
public interface HelloFeignService {
//地址为服务提供者对外暴露的地址
@RequestMapping(value = "/hello" , method = RequestMethod.GET)
String hello(@RequestParam("name") String name);
}
调用服务提供者
@RestController
public class IndexController {
@Autowired private HelloFeignService feignService;
@RequestMapping(value = "/hello" , method = RequestMethod.GET)
public String hello(String name){
return feignService.hello(name);
}
}
启动上述两个i项目,访问 http://localhost:9700/hello?name=zy ,
例二:
@FeignClient(value = "im-wms", contextId = "DeliveryOrderClient")
public interface DeliveryOrderClient {
@RequestMapping(value = "/im-wms/delivery-order-client/modifyTranPlan", method = RequestMethod.POST)
RestResult<Boolean> modifyTranPlan(@RequestBody ModifyTranPlanRequest modifyTranPlanRequest);
}
//当注入DeliveryOrderClient,调用其modifyTranPlan方法则会走/im-wms/delivery-order-client/modifyTranPlan,此时在controller中书写此接口的service方法完成业务即可
<三>:在不知道@Autowired private HelloFeignService feignService的情况下,可以通过接口名来获取,如下:
public interface FicoClient {
@RequestMapping(value = "/im-fico/co/getCompanyCostList",method = RequestMethod.POST)
RestResult<CompanyCostDto> getCompanyCostList(@RequestBody String companyCode);
}
当注入FicoClient,调用其方法ficoClient.getCompanyCostList,则访问"/im-fico/co/getCompanyCostList"此接口,得到返回数据