許哲瑋 智慧法师
我很含蓄, 什么也没有留下!

ESP-SDK的引入及使用

DAP技术平台2024-12-27 23:26 阅读 193 评论 0

1.目的
在DAP后端服务中, 可以呼叫在ESP上注册的服务

2.什么是ESP-SDK ?
ESP全名是Enterprise Service Pool
为了让METIS(雅典娜)各组件/应用后端能更简易且轻松的经由服务池(ESP)呼叫服务方所提供的API , 故提供ESP-SDK套件, 让需求方实作呼叫SDK的方法,来完成服务的调用。

3.使用前需要做的配置修改
3.1 pom档引入jar档
依照您目前使用的DAP版本, 于下表选择适合的SDK版本(完整的版本号请跟系统开发顾问询问), 后将之设定在pom档中, 。

pom档设定在<dependencies>中, 新增一个<dependency>,其中${version}请替换成正确版本, 例如1.2.18

<dependency>

  <groupId>com.digiwin.athena</groupId>

  <artifactId>esp-sdk</artifactId>

  <version>${version}</version>

  <scope>provided</scope>

</dependency>

范例图示--


3.2 Properties配置文件所需修改
ESP-SDK在使用过程中, 会需要呼叫到鼎捷雅典娜的组件服务, 所以我们需要在application.properties中配置所需的资讯

3.2.1 application.properties中新增下述参数

domain.lmc=@domain_lmc@

domain.esp=@domain_esp@

domain.mdc=@domain_mdc@

domain.tm=@domain_tm@

eocUrl=@eocUrl@

范例图示--


3.2.2 配置参数实际值
开发时--
在开发阶段, 您可能会想要在本地的环境中尝试呼叫,这时您可将application.properties中的这些参数设定如下(以华为测试区为例)

domain.lmc=https://lmc-hw-test.digiwincloud.com.cn

domain.esp=https://esp-test.apps.digiwincloud.com.cn

domain.mdc=https://mdc-test.apps.digiwincloud.com.cn

domain.eoc=https://eoc-test.digiwincloud.com.cn

domain.tm=https://knowledgemaps-test.apps.digiwincloud.com.cn

eocUrl=https://eoc-test.digiwincloud.com.cn


布署上云时--
开发完成后, 您会需要将后端开发成果布署上云, 这时您需要在开发者工作台中,您的应用-参数配置中去配置相关参数(以华为测试区为例)
注:布署上云的时候, 因为都在同一云环境之内, 所以URL填写内网URL(与本地测试时的外网URL不同), 可以增加呼叫效能
可依下方的key及对应的URL, 去新增/修改您的参数配置

"domain_lmc":"http://lmc-hw-test.digiwincloudlocal.com.cn"

"domain_esp":"esp-test.apps.digiwincloudlocal.com.cn"

"domain_mdc":"http://mdc-test.apps.digiwincloudlocal.com.cn"

"domain_tm":"http://knowledgemaps-test.apps.digiwincloudlocal.com.cn"

"eocUrl":"https://eoc-test.digiwincloud.com.cn"


操作类程式放入您的IDEA专案中
下面为程式内容,请将下方程式复制后,产生EspServiceUtil.java
档案名称 : EspServiceUtil.java(记得改package路径)

package com.digiwin.pdemo.util;

import com.digiwin.app.common.DWApplicationConfigUtils;
import com.digiwin.app.container.exceptions.DWException;
import com.digiwin.app.service.DWServiceContext;
import com.digiwin.athena.esp.sdk.Invoker;
import com.digiwin.athena.esp.sdk.init.EspSdkInitialize;
import com.digiwin.athena.esp.sdk.model.RequestModel;
import com.digiwin.athena.esp.sdk.model.ResponseModel;

import java.util.Map;
import java.util.Objects;

/**
 * @Description:Esp服務調用工具
 * @ClassName:EspServiceUtil
 */
public class EspServiceUtil {
    private static void initEspConfig() {
        String domain_esp = DWApplicationConfigUtils.getProperty("domain.esp");
        String domain_mdc = DWApplicationConfigUtils.getProperty("domain.mdc");
        String domain_tm = DWApplicationConfigUtils.getProperty("domain.tm");
        String eocUrl = DWApplicationConfigUtils.getProperty("eocUrl");
        EspSdkInitialize.initConfig(domain_esp, domain_mdc, domain_tm, eocUrl);
        String appId = DWApplicationConfigUtils.getProperty("appId");
        String appToken = DWApplicationConfigUtils.getProperty("iamApToken");
        String lmcUrl = DWApplicationConfigUtils.getProperty("domain.lmc");
        EspSdkInitialize.initAppConfig(appId, appToken);
        EspSdkInitialize.initLmcConfig(lmcUrl);
        EspSdkInitialize.enableEspRouting(true);
    }

    /**
     *  呼叫同步调用ESP服务
     *
     * @param eocHeader 运营单元Map , 例如{"eoc_company_id":"1","eoc_site_id":"1"}
     * @param serviceName 服务名称
     * @param hostProd 默认Athena,也可指定产品别,比如:E10
     * @param hostId 注册在中台上的host id
     * @param para 请求Body
     * @return response body
     */
    public static String invokeRestSyncApi(Map eocHeader, String serviceName, String hostProd, String hostId, String para) throws Exception {
        initEspConfig();
        RequestModel requestModel = new RequestModel();
        buildCommonHeader(requestModel, serviceName, hostProd, hostId, eocHeader);
        requestModel.setBodyJsonString(para);
        ResponseModel responseModel = Invoker.invokeRestSync(requestModel);

        //check response
        // 稳敏API发生调用异常  => digi-code 非0开头
        if (Objects.isNull(responseModel.getEspCode()) || !responseModel.getEspCode().startsWith("0")) {
            throw new DWException("digi-code is not 0 error");
        }

        // 业务异常
        if (!"000".equals(responseModel.getSrvCode())) {
            throw new DWException("srvCode is not 000 error");
        }

        return responseModel.getBodyJsonString();
    }

    private static void buildCommonHeader(RequestModel requestModel, String serviceName, String hostProd, String hostId, Map eocHeader){

        DWServiceContext context = DWServiceContext.getContext();
        String tenantName = context.getProfile().get("tenantId").toString();
        String token = context.getToken();
        requestModel.setHostProd(hostProd);
        requestModel.setHostId(hostId);
        requestModel.setHostVer(DWApplicationConfigUtils.getProperty("eaiHostVer"));
        requestModel.setHostAcct("athena");
        requestModel.setLanguage("zh_CN");
        requestModel.setTenantId(tenantName);
        requestModel.setServiceName(serviceName);
        requestModel.setEocMap(eocHeader);
        requestModel.addHeader("token", token);
    }
}







路过

雷人

握手

鲜花

评论

您需要登录后才可以发表言论 登录立即注册
facelist
  • 178帖子
  • 0关注
  • 0粉丝
  • 关注公众号
Copyright © 2026 鼎捷数智股份有限公司 版权所有 All Rights Reserved. Powered by Discuz! X5.0
关灯
即将开放
返回顶部
返回顶部