• feign

    为了解决服务间调用的问题,springCloud默认提供了feign

    feign使用示例

    springBoot启动类添加注解@EnableFeignClients,HZERO的各个服务注解默认都包含了该注解。例如文件服务注解:@EnableHZeroFile

    添加接口声明API参数及路径

    // 接口添加注解 @FeignClient ,指定要调用的服务名,指定失败回调
    @FeignClient(value = "hzero-file", fallback = FileRemoteServiceFallback.class)
    public interface FileRemoteService {
        
            /**
             * 上传文件
             *
             * @param organizationId 租户ID
             * @param bucketName     桶名
             * @param directory      目录
             * @param fileName       文件名
             * @param byteFile       文件byte
             * @return URL地址
             */
            @PostMapping("/v1/{organizationId}/files/byte")
            ResponseEntity<String> uploadByteFile(@PathVariable("organizationId") Long organizationId,
                                                  @RequestParam("bucketName") String bucketName,
                                                  @RequestParam(value = "directory", required = false) String directory,
                                                  @RequestParam("fileName") String fileName,
                                                  @RequestBody byte[] byteFile);
    }
    

    注意:

    实现接口的失败回调

    // 类实现对应的feign接口
    @Component
    public class FileRemoteServiceFallback implements FileRemoteService {
        
            @Override
            public ResponseEntity<String> uploadByteFile(Long organizationId, String bucketName, 
                                                         String directory, String fileName, byte[] byteFile) {
                // feign调用的失败补偿执行方法,可以在这里进行事务的一致性控制
                throw new CommonException("File service is not available, please check");
            }
    }