前言
最近在弄一个新的项目,子服务巨多,互相之间还有一些业务关联,用的是rpc调用(spring boot的feignClient),写个文章记录一下
feignClient使用
pom文件
<!-- rpc layer: feign & circuit breaker -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
接口类
@FeignClient(value = "dts-organization", fallbackFactory = OrganizationServiceFallback.class)
public interface OrgFeignClient {
@GetMapping("/org/organization/info/{id}")
DtsResponse<OrganizationInfoDto> getOrganizationId(@PathVariable("id") Long orgId);
}
其中的dts-organization换成需要连接到的其他的服务名
异常处理类
@Slf4j
@Component
public class OrganizationServiceFallback implements FallbackFactory<OrgFeignClient> {
@Override
public OrgFeignClient create(Throwable throwable) {
String msg = throwable == null ? "" : throwable.getMessage();
log.error("RPC调用异常:{} || {}", throwable, msg);
return new OrgFeignClient() {
@Override
public DtsResponse<OrganizationInfoDto> getOrganizationId(@PathVariable("id") Long orgId) {
return new DtsResponse<>();
}
};
}
}
使用
直接在service里引用接口类就可以使用
private final OrgFeignClient orgFeignClient;
DtsResponse<OrganizationInfoDto> orgInfo=orgFeignClient.getOrganizationId(userInfo.getOrganization().getId());
小结
之前用的服务间调用很多都走的是http写url的形式调用,一旦ip改变还得改配置重启,这次换成服务名就解决了这个问题