Skip to content

spring接入

tonyd1989 edited this page Sep 2, 2022 · 1 revision

spring使用推荐

以接入图片检测为例:

1. 初始化bean

    // (可选)异步重试,需要开启时需要初始化bean,此bean全局单例
    @Bean
    public DefaultRequestRecover createRequestRecover(){
        DefaultRequestRecover requestRecover = DefaultRequestRecover.createRecover("./recover");
        // 注册故障恢复的handler,用于接口请求失败,异步重试成功后的处理逻辑,每个接口对应一个,必填
        requestRecover.registerRecoverHandler(new AbstractRequestRecoverHandler<TextCheckResponse>() {
            @Override
            public void handle(TextCheckResponse response) {
                // 业务逻辑
            }
        });
        requestRecover.registerRecoverHandler(new AbstractRequestRecoverHandler<ImageV5CheckResponse>() {
            @Override
            public void handle(ImageV5CheckResponse response) {
                // 业务逻辑
            }
        });
        TextCheckResponse textFallbackResp = new TextCheckResponse();
        textFallbackResp.setCode(200);
        textFallbackResp.setMsg("text fallback response");

        ImageV5CheckResponse imageFallback = new ImageV5CheckResponse();
        imageFallback.setCode(100);
        imageFallback.setMsg("image fallback response");

        requestRecover.registerFallback(textFallbackResp);
        requestRecover.registerFallback(imageFallback);

        return requestRecover;
    }

    // 每个secret_id需要初始化一个bean
    @Bean
    public AntispamRequester createRequester(DefaultRequestRecover requestRecover){
        ClientProfile clientProfile = ClientProfile.defaultProfile(new Credentials("IMAGE_SECRET_ID", "IMAGE_SECRET_KEY"));
        // 可选设置请求的相关参数,这里设置了timeout
        clientProfile.getHttpClientConfig().setSocketTimeoutMillis(10000);
        // 可选设置同步重试的重试次数
        clientProfile.setMaxRetryCount(2);
        // 可选设置熔断降级的相关参数,这里设置了降级的阈值
        clientProfile.getBreakerConfig().circuitBreakerFailThresholdPercentage(80);
        // 可选设置异步重试策略
        clientProfile.setRequestRecover(requestRecover);

        return new AntispamRequester(clientProfile);
    }

    // 图片检测结果会由于算法升级或者人工鉴别可能产生最新准确的结果,强烈建议通过轮询回调或者主动回调(2选1)的方式,来获取最新的检测结果,并根据业务场景自行处理
    // (可选)如果需要启用轮询回调,请初始化下面的bean,每个businessId对应一个bean
    @Bean
    public ImageCallback createImageCallback(){
        CallbackProfile callbackProfile = new CallbackProfile("IMAGE_BUSINESS_ID_1");
        // 调整轮询回调的最大线程数,不设置则默认值为3
        callbackProfile.setConcurrency(2);
        ImageCallback imageCallback = new ImageCallback(callbackProfile) {
            @Override
            public void handle(List<ImageV5Result> callbackData) {
                // 处理轮询回调的结果,需保证幂等性
            }
        };
        return imageCallback;
    }

    @Bean
    public ImageClient createImageClient(AntispamRequester antispamRequester, ImageCallback[] imageCallbacks){
        // imageCallbacks中的bean必须保证businessId和antispamRequester中的secretId拥有相应的对应关系
        return new ImageClient(antispamRequester, imageCallbacks);
    }

2. 添加关闭的hook

    @Autowired
    private List<ImageCallback> imageCallbacks;

    @Autowired
    private DefaultRequestRecover requestRecover;

    // 为了保证服务进程关闭时,不会因为进程关闭而丢失数据,建议在进程关闭的hook中做一些关闭处理
    @PreDestroy
    public void close(){
        try {
            for (ImageCallback imageCallback : imageCallbacks) {
                imageCallback.close();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        requestRecover.stop();
    }

3. 使用client

    @Autowired
    private ImageClient imageClient;

    public void imageAntispamCheck(){
        // 实例化请求对象
        ImageV5SyncCheckRequest checkRequest = new ImageV5SyncCheckRequest();
        // 设置易盾内容安全分配的businessId
        checkRequest.setBusinessId("BusinessId");

        // 根据需要设置请求的检测节点,默认杭州,现阶段只支持检测接口
        checkRequest.setRegionCode("cn-hangzhou");

        // 实例化要检测的图片对象
        ImageV5CheckRequest.ImageBeanRequest image = new ImageV5CheckRequest.ImageBeanRequest();
        image.setData("待检测的图片url 或者 图片base64");
        image.setName("图片名称(或图片标识)");
        // 设置图片数据的类型,1:图片URL,2:图片BASE64
        image.setType(1);
        // 非必填,强烈建议通过轮询回调或者主动回调(2选1)的方式,来获取最新的检测结果。主动回调数据接口超时时间默认设置为2s,为了保证顺利接收数据,需保证接收接口性能稳定并且保证幂等性。
        image.setCallbackUrl("主动回调地址");

        // 设置需要检测的图片列表,最大32张或者10M
        List<ImageV5CheckRequest.ImageBeanRequest> images = new ArrayList<>();
        images.add(image);
        checkRequest.setImages(images);
        ImageV5CheckResponse checkResponse = imageClient.syncCheckImage(checkRequest);
    }
Clone this wiki locally