2021与蓝度共同重构项目,服务端
liuhaonan
2022-08-24 6f570591fb9155cf858981f432467ee9980762cd
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -14,6 +14,8 @@
import com.sandu.ximon.admin.manager.iot.rrpc.topic.IBaseTopic;
import com.sandu.ximon.admin.manager.iot.rrpc.topic.ICustomizeTopic;
import com.sandu.ximon.admin.manager.iot.rrpc.util.FrameUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import java.util.List;
@@ -23,6 +25,7 @@
 * @author chenjiantian
 * @date 2021/12/2 18:21
 */
@Slf4j
public abstract class BaseInvokeSyncService implements IInvoke, IBaseTopic, ICustomizeTopic {
    /**
@@ -33,7 +36,7 @@
     * @param clz           内部帧响应实体类 如果不想自己解析 可带上
     * @return 返回的解码帧实体类 同时把内部帧解码之后也携带上
     */
    public <T extends BaseResponseInnerFrame<T>> WrapResponseCommonFrame<T> sendRRPC(String deviceName, IRequestFrame iRequestFrame, Class<T> clz){
    public <T extends BaseResponseInnerFrame<T>> WrapResponseCommonFrame<T> sendRRPC(String deviceName, IRequestFrame iRequestFrame, Class<T> clz) {
        CommonFrame commonFrame = sendRRPC(deviceName, iRequestFrame);
        if (commonFrame == null) {
            return null;
@@ -150,7 +153,7 @@
        return null;
    }
     /**
    /**
     * 调用自定义topic
     * https://help.aliyun.com/document_detail/69584.htm?spm=a2c4g.11186623.0.0.25b33982bSQSom#reference-snk-mrz-wdb
     *
@@ -169,25 +172,40 @@
        request.setIdentifier("rrpc");
        request.setArgs(JSON.toJSONString(param));
        //todo
        // 获得服务调用响应
        InvokeThingServiceResponse response = null;
        try {
            response = getClient().getAcsResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        return getAcsResponse(request, 1);
    }
    /**
     * 获得服务调用响应
     *
     * @param request
     * @return
     */
    private InvokeThingServiceResponse.Data getAcsResponse(InvokeThingServiceRequest request, int time) {
        if (time <= 3) {
            InvokeThingServiceResponse response = null;
            try {
                response = getClient().getAcsResponse(request);
                if (response == null) {
                    log.error("调用rrpc失败,响应为空!");
                    Thread.sleep(100);
                    return getAcsResponse(request, time + 1);
                }
                if (!response.getSuccess()) {
                    log.error("调用rrpc失败," + response.getErrorMessage());
                    Thread.sleep(100);
                    return getAcsResponse(request, time + 1);
                } else {
                    // 服务调用成功,仅代表发送服务指令的成功,不代表执行服务本身是否成功
                    return response.getData();
                }
            } catch (Exception e) {
                throw new BusinessException("错误信息:" + e.getMessage());
            }
        } else {
            throw new BusinessException("硬件请求失败,请检查硬件设备!");
        }
        if (response == null) {
            throw new BusinessException("调用rrpc失败");
        }
        if (!response.getSuccess()) {
            throw new BusinessException("调用rrpc失败," + response.getErrorMessage());
        }
        // 服务调用成功,仅代表发送服务指令的成功,不代表执行服务本身是否成功
        if (response.getSuccess()) {
            // 仅同步服务有result
            return response.getData();
        }
        return null;
    }
}