spring boot rpc服务间调用

文章目录

  • 前言
  • feignClient使用
    • pom文件
    • 接口类
    • 异常处理类
    • 使用
  • 小结

前言

最近在弄一个新的项目,子服务巨多,互相之间还有一些业务关联,用的是rpc调用(spring boot的feignClient),写个文章记录一下

feignClient使用

pom文件

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-loadbalancerartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-circuitbreaker-resilience4jartifactId>
        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改变还得改配置重启,这次换成服务名就解决了这个问题

你可能感兴趣的:(spring,boot,rpc,后端)