spring boot整合Fegin实现远程调用
使用fegin实现远程调用,首先明确调用方和被调用方的关系
①被调用方(CMS)和调用方(EQMS)是共属一个微服务项目,都注册在一个eureka服务上才能被调用到
②被调用方只需要在Controller声明要被调用方调用的Api接口即可
③调用方需要声明是fegin的客户端去调用其他服务的接口
假设要调用的是CMS上的该接口
@DeleteMapping("/delete")
public Integer delete(String id){
//根据该id删除CMS系统的数据
remove(id);
}
1.在调用方的启动类上加上@EnableFeignClients
@@EnableFeignClients
@SpringBootApplication
public class EQMSApplication{
}
2.调用方需要创建远程调用的client及熔断回调类
//直接可以创建一个内部类,声明被调用方的api接口,假如被调用方接口异常就会回调异常类进行异常声明
//name可以声明value,CMS是我系统服务器的名称直接调用该系统,名称要去eureka上面看要调用系统的名称即可,url可省略,我是用来测试在本地进行调用
//CmsServiceFallBack 这是如果fegin调用失败需要熔断以及提示错误信息的类
@FeignClient(name="CMS",url="${conf.address.cms}",fallbackFactory=CmsServiceFallBack .class)
public interface CmsFeignClient {
//两种传参方法,请求的api cms后面的路径是被调用方的路径前缀
@RequestMapping("/cms../delete/{id}", method = RequestMethod.Post)
public Integer delete(@PathVariable String id);
//调用方的属性值名称id要跟被调用方的名称一致!!!
@RequestMapping("/cms../delete", method = RequestMethod.Post)
public Integer delete(@RequestParam("id") String id);
}
@Component
class CmsServiceFallBack implements FallbackFactory<CmsFeignClient>{
protected Logger=LoggerFactory.getLogger(getClass());
@Override
public CmsFeignClient create(Throwable throwable){
Result result=new Result();
result.setCode(504);
result.setMsg(throwable.getMessage());
return new CmsFeignClient(){
@Override
public Integer changes(String id){
logger.info(。。);
return "远程调用失败!";
}
}
}
}
//可以配置微服务地址本地调试
cof:
address:
cms:http://localhost:8800
//开启服务熔断
fegin:
hystrix:
enabled:true
eureka上面看要调用的系统名称