独立部署模式

非凌云业务中台(第三方)开发应用,依旧采用集成中心对接南向子系统,因此对集成中心进行独立部署,并提供简易配置工具,进行套件查看、套件授权、套件绑定、适配器配置等操作。

服务器配置要求

  • cpu 4c+(多线程)
  • 内存 16G+
  • 数据盘 200G+
  • 操作系统 CentOS7.7+
基础服务:k3s、nacos、mysql、redis
应用服务:pai-apistore、pai-apis-edge-ui、pai-data-sync-edge-agent

开发

在凌云开发者平台上进行协议套件定义和适配器开发

应用实现DEMO

  • 配置参数 bootstrap-dev.yml
pai:
  apistore:
    config:
      api-server: http://pai.flyrise.cn/apistore-api
      api-router: /open/v1/1/ip/query
      client-id: kysK******K4zqdf
      secret-key: 3ylsWI******daWTOSNj
      config-id: 235546446765675676576765
  • ApiProperties.java
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties("pai.apistore.config")
public class ApiProperties {

    /**
     *  集成中心服务地址
     */
    private String apiServer;

    /**
     * 应用授权ID
     */
    private String clientId;
    /**
     * 应用授权Key
     */
    private String secretKey;
    /**
     * 协议地址
     */
    private String apipRouter;

    /**
     * configId适配器配置ID
     */
    private String configId;

    public String getApiServer() {
        return apiServer;
    }

    public void setApiServer(String apiServer) {
        this.apiServer = apiServer;
    }

    public String getApiRouter() {
        return apiRouter;
    }

    public void setApiRouter(String apiRouter) {
        this.apiRouter = apiRouter;
    }

    public String getClientId() {
        return clientId;
    }

    public void setClientId(String clientId) {
        this.clientId = clientId;
    }

    public String getSecretKey() {
        return secretKey;
    }

    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }

    public String getConfigId() {
        return configId;
    }

    public void setConfig(String configId) {
        this.configId = configId;
    }
}
  • ServiceImpl.java
import cn.flyrise.common.core.exception.CommonException;
import cn.flyrise.pai.attendancestd.config.ApiProperties;
import cn.flyrise.pai.attendancestd.model.vo.IpAddressVO;
import cn.flyrise.pai.attendancestd.service.IIpAddressService;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

@Service
public class ServiceImpl implements Service {
    @Autowired
    ApiProperties apiProperties;

    @Override
    public IpAddressVO query(String ip) {
        final String jsonBody = JSONUtil.createObj().set("ip", ip).toString();
        final String timestamp = String.valueOf(System.currentTimeMillis());
        // 签名方式为:md5(body + configId + timestamp + secureKey)
        final String sign = SecureUtil.md5(jsonBody + apiProperties.getConfigId() + timestamp + apiProperties.getSecretKey());
        final String result = HttpRequest.post(apiProperties.getApiServer().concat(apiProperties.getApiRouter()))
                .header("X-Client-Id", apiProperties.getClientId())
                .header("X-Timestamp", timestamp)
                .header("X-Config-Id", apiProperties.getConfigId())
                .header("X-Sign", sign)
                .body(jsonBody)
                .timeout(3000).execute().body();
        if (JSONUtil.isJson(result)) {
            JSONObject json = JSONUtil.parseObj(result);
            if (json.getBool("success")) {
                return JSONUtil.toBean(json.getJSONObject("data"), IpAddressVO.class);
            }
        }
        throw new CommonException("1001", "无效的IP");
    }
}

简易工具

套件查看

  • 查看协议套件,以及套件对应的协议信息

协议文档下载

  • 提供第三方使用集成中心接入应用时可以按需下载协议文档

应用授权

  • 添加应用信息

  • 生成clientIdsecretKey

应用协议关联

  • 应用使用到的协议套件进行关联绑定

适配器参数配置

  • 选择适配器(根据实际情况选择)

  • 配置适配器参数

  • 获取configId

集成中心服务

  • 回调地址配置

  • 北向协议访问地址

http://nodeIP:31880/open/notify/

云数据同步

集成中心独立部署后需进行协议套件、适配器数据的同步。

  • 同步方式

浏览器访问:http://nodeIP:31081/?k=YYMMDDHHmm

  • 数据更新

开发者平台更新了协议套件内容或适配器脚本进行了修改,边端要使用最新的内容则进行更新,更新方式与同步方式一致

  • 示例

文档更新时间: 2023-07-30 11:02   作者:管理员