微服务间接口调用 feign
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
Feign说明
Feign是一种声明式、模板化的HTTP客户端。在spring cloud中使用Feign可以做到类似于普通的接口的请求调用可以发现对应的服务的接口进而直接调用对应服务中的接口。
引入依赖启动类开启客户端
首先需要引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
然后在启动类中加入注解@EnableFeignClients 开启Feign客户端。
Feign接口开发
然后在当前服务内编写Feign接口接口与普通的controller层类似只是在类上不需要写@Controller等注解只需要加上@Component 、 @FeignClient注解即可下面的请求方法需要写上请求方式根据提供服务的接口适配@PostMapping(“/findList”)注解。如下
@Component
@FeignClient(value = "sso", path = "/api/user", fallback = UserClientHystrix.class)//value是需要调用的服务名称path是sso服务内的请求路径
public interface UserClient {
/**
* 获取对象集合
* @param object
* @return
*/
@PostMapping("/findList")//根据服务适配添加注解
Result<UserDO> findList(@CustomJSONBody Object object);
}
编写容错类
容错类主要是在调用对应的服务接口时如果出现异常时的应急措施返回一个自定义结果。
@Component("userClientHystrix")
public class UserClientHystrix implements UserClient {
@Override
public Result<UserDO> findList(Object object) {
return Result.error("服务不可用");
}
}
在业务层调用Feign客户端接口
编写好Feign客户端接口后就可以在本服务内的业务层调用Feign的接口实现服务间的调用了。
@Resource
UserClient userClient;
public Result<List<UserDO>> findList(){
Map<String, String> map = new HashMap<>();
map.put("userNo", "1001");
return Result.success(userClient.findList(map).getData());
}
Feign的常用属性如下
name指定FeignClient的名称如果项目使用了Ribbonname属性会作为微服务的名称用于服务发现
url: url一般用于调试可以手动指定@FeignClient调用的地址如果指定了url地址后会优先调用url指定的地址
decode404:当发生http 404错误时如果该字段位true会调用decoder进行解码否则抛出FeignException
configuration: Feign配置类可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback: 定义容错的处理类当调用远程接口失败或超时时会调用对应接口的容错逻辑fallback指定的类必须实现@FeignClient标记的接口
fallbackFactory: 工厂类用于生成fallback类示例通过这个属性我们可以实现每个接口通用的容错逻辑减少重复的代码
path: 定义当前FeignClient的统一前缀当我们项目中配置了server.context-path,server.servlet-path时使用