设备接入服务组件->微服务and容器化改造说明文档

SVN路径

https://192.0.0.241/USTA-dac/branches/dev/V1.10.500/dac

目录结构

在这里插入图片描述

  • das为设备接入服务,负责驱动管理,资源同步,订阅下发。下面有两个文件夹分别对应了openssl1.0的版本和后面更换接口后openssl1.1的版本。
  • das_proxy为设备信令下发代理服务,主要控制云台等下发信令的转发。
  • dms为设备管理服务,负责数据持久化。
  • 微服务打包工具,负责将驱动成果物和das壳子打包成驱动微服务版本。

驱动微服务如何部署

在这里插入图片描述

  1. 编译

在das目录用源码编译出来libConfigMgr.so(配置管理),libDevResMgr.so(设备管理),libDriverMgr.so(驱动管理),libProtocolProxy.so(协议代理)这四个库之后。将这几个库放入servicepackage文件夹。

  1. 放入驱动成果物

将驱动包放到driverpackage文件夹里面

  1. 运行脚本

运行脚本
./package.sh
打包出来的微服务成果物在output文件夹下面

  1. 修改配置文件

把包放到安装环境
在驱动包的META-INF文件夹下driver.xml的加上event能力

(重要!不然会导致订阅下发不下去)

  1. 安装微服务

执行包下面的install.sh脚本
systemclt restart 程序名启动程序

ok,执行完这五部,驱动微服务版本部署完成。

驱动das改动

相对于基线设备接入服务有一些改动点

  1. 加入了新的注册接口
    主要改动在数据管理这个定时器里面
    CDataSrcMgr::OnTimer
    接口为,向dms注册。
//RegisterDrvToDMS
//驱动注册DMS的格式.
POST /dac/driverManager/v1/driverRegister HTTP/1.1 
Host: 10.14.69.25:8080 
TOKEN: SElLIFRvdVBhWFFmd0xkdVNKRTI6bFFTY1ZUYTlpcEFkTjEyblZhYmVYTU5uQlN4TnVxS0VyVlhlbnVtWGdEOD0= 
Cache-Control: no-cache 
Postman-Token: 99498a85-4ff7-6e2a-24af-d4d78c4694fc 
{ 
   "indexCode":"test1", 
   "deviceKey":"drv_vss_hiksdk_general_1.10.100", 
   "addr":"10.19.133.74", 
   "port":8000
   "ehomePort":15000
}
  1. 服务标识生成的方式。与dms的地址读取方式
    基线das组件的服务标识与dms的地址ip信息,是运管生成,从配置文件中读取。
    而微服务版本的服务标识是驱动微服务第一次启动的时候随机生成,以文件的形式保存在本地,同时要向注册中心去注册。dms的地址从cousal注册中心中读取。
//CConfigWrapper::Initialize
//服务标识生成代码

std::fstream fstr;
const char* fileName = "dasIndexCode.txt";
std::ios_base::openmode openMode = (std::ios::in | std::ios::out | std::ios::app);
fstr.open(fileName, openMode);
string dasIndexCode("");
if(fstr)
{
    std::ostringstream oStrStrDicCata;
    oStrStrDicCata << fstr.rdbuf();
    dasIndexCode = oStrStrDicCata.str();
    if(dasIndexCode.empty())
    {
        dasIndexCode=GetUUIDStr(8)+"-"+GetUUIDStr(4)+"-"+GetUUIDStr(4)+"-"+GetUUIDStr(4)+"-"+GetUUIDStr(12);
        fstr << dasIndexCode;
    }
    fstr.close();
}
else
{
    DAF_ERROR("open file dasIndexCode.txt error.");
    nRet = CONFIGMGR_ERR_CSF_INIT;
    break;
}

//向注册中心注册
char* config[] = {"dms", "bic"};
//驱动直接向dms注册,此处所有不同类型驱动的名称相同,不能用于服务发现
HPR_Strncpy(CsfParam.serverName,"dac-dasdvr",MAX_SERVER_NAME_LEN - 1);
HPR_Strncpy(CsfParam.serverID,m_strIndexcode.c_str(),m_strIndexcode.size());
CsfParam.nEnableFunctions = kAddress | kRegister;//向consul注册后所有类型驱动的名字都是dac-dasdvr
CsfParam.extraConfigSize = 2;
CsfParam.extraConfigArray = config;


//在CConfigWrapper::OnTimer这个定时器中UpdateDmsHostInfo这个函数定时去获取dms的信息。
//从注册中心获取dms地址。如果获取不到则用默认地址
if (true != CsfDocker::instance()->GetSvrAddrArray("dac-dms", addarr, &chDmsIpSize))
{
	strIp = "127.0.0.1";
	strPort = "8081";
	DAF_ERROR("CsfDocker::instance()->GetSvrAddr dmsinfo from cfs error[err=%d]", Csf::GetLastError());
}
else
{
	for (int i = 0; i < chDmsIpSize; i++) {
		string straddr = to_string(addarr[i].serverIP) + ":" + to_string(addarr[i].serverPort);
		strIp = to_string(addarr[i].serverIP);
		strPort = to_string(addarr[i].serverPort);
		//如果地址没有变则退出
		if (straddr == m_strDmsInfo) {
			break;
		}
	}

	DAF_INFO("CsfDocker::instance()->GetSvrAddr dmsinfo [ip=%s][port=%s]", strIp.c_str(), strPort.c_str());
}
  1. 支持event能力
    支持全能力下发
 //CDriverMgr_SyncDevSubEventInfo
 if (events.size() == 1 && ((events[0].asString() == "0") || events[0].asString() == "*")) {
	listEvents.push_back(0);
}
else {
	for (unsigned int j = 0; j < events.size(); ++j)
	{
		int iEvent = HPR_Atoi32(events[j].asString().c_str());
		if (iEvent != 0)
		{
			listEvents.push_back(iEvent);
		}
	}
}
  1. 设备信息修改之后的订阅
    设备信息修改了之后迁移之后会额外的去一个个单独获取一下设备的订阅信息。因为基线是das管理所有驱动所以并没有这个逻辑。而微服务是一个das对应一个驱动所以需要再获取一下,防止订阅信息丢失。
//CDeviceMgr::ModifyDeviceInUserThread
if (cListDevice.size()>0)
 {
      DEVRESMGR_INFO("SubDevEventInUserThread start");
      CDataSrcMgrSingleton::Instance()->SubDevEventInUserThread(cListDevice);
  }
  1. 其他
    其他还有一些小的改动,比如接口转换啥的,就一一列举了。

问题排查

目前遇到的问题最多的就是订阅问题。所以说解决了订阅下发的问题就解决了90%的问题。
我改了很多bug之后,das壳子本身的问题应该是没有了。
日志打的很多很详细。可以配合pluginframe的同事一起看下。如果没有发送到pluginframe就可以排查下das的问题。
可以从下面几个方向切入

  1. 下发订阅的时间点。
    订阅在这几个时间点会下发:1.微服务重启的时候会全量像dms拉订阅信息 2.添加设备的时候dms会调/daf/v1/subEvent接口下发订阅。3.设备迁移的时候会去单个单个拉设备信息。
    如果是情况1.可以搜索GetDevEventInfoData和GetEventInfoData来确定有没有从dms拉到订阅信息。
    如果是情况2.可以搜索/daf/v1/subEvent来确定dms有无下发。如果有下发可以搜索subscribe查看对应的设备编号和下发的订阅信息。
    如果是情况3.可以搜索GetSingleDevEventInfoData begin,看下有无去获取单个设备订阅信息。如果有,则可以dms抓包看这个/dms/v1/device/indexCodes/eventInfo接口获取的订阅信息来排查
  2. 加解密。
    有时候获取到了订阅信息,驱动那边却说没有下发。可以根据日志报错看下有没有解密失败。如果是解密失败了的话,可以从密钥交互方向切入。
  3. 日志信息
    所有订阅下发都会经过Subscribe这个函数。可以搜索日志中一段时间Subscribe begin的打印来确定下发订阅的数量。下发前会把订阅地址解密后打印出来确保加密是没有问题的。
  4. 设备数量
    驱动有最大设备数量的限制,如果超过了最大设备数量,则超出的设备就直接不下发了,同样订阅也发不下来。

补充

其他还有啥需要补充的可以说下我再补充下。

在这里插入代码片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/114461.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud智慧工地源码,利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术开发,微服务架构

智慧工地系统充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术&#xff0c;以PC端&#xff0c;移动端&#xff0c;设备端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳务、设备、物料、安全、环境、能源、资料、计划、质量、视频监控等…

Flutter 02 基础组件 Container、Text、Image、Icon、ListView

一、Container容器组件&#xff1a; demo1&#xff1a; import package:flutter/material.dart;void main() {runApp(MaterialApp(home: Scaffold(appBar: AppBar(title: const Text("你好Flutter")),body: const MyApp(),),)); }// 容器组件 class MyApp extends St…

BUUCTF 数据包中的线索 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 公安机关近期截获到某网络犯罪团伙在线交流的数据包&#xff0c;但无法分析出具体的交流内容&#xff0c;聪明的你能帮公安机关找到线索吗&#xff1f; 密文&#xff1a; 下载附件&#xff0c;解压得到一个.pcapng文…

tensorflow-gpu 找不到指定模块

排除&#xff1a; 1.python编译器是64位 查询教程 2. cuda cudnn版本 均是12.2 可以向下兼容 cmd&#xff1a; nvcc -V即可 另一种方法 tensorflow官网教程 pip install tensorflow_gpu1.12.0 4.安装torch-gpu 检查所在环境 解决&#xff01;&#xff01; conda install …

Apollo云实验:使用Sim control仿真自动驾驶

使用Sim control仿真自动驾驶 概述Sim control仿真自动驾驶启动DreamView仿真系统 实验目的福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 自动驾驶汽车在实现落地应用前&#xff0c;需要经历大量的道路测试来验证算法的可行性和系统的稳定性&#xff0c;但道路测试…

麒麟KYLINIOS软件仓库搭建01-新创建软件仓库服务器

原文链接&#xff1a;麒麟KYLINIOS软件仓库搭建01-新创建软件仓库服务器 hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟桌面操作系统软件仓库搭建的文章01-新创建软件仓库服务器&#xff0c;本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版本上搭建内网…

opencv复习(简短的一次印象记录)

2-高斯与中值滤波_哔哩哔哩_bilibili 1、均值滤波 2、高斯滤波 3、中值滤波 4、腐蚀操作 卷积核不都是255就腐蚀掉 5、膨胀操作 6、开运算 先腐蚀再膨胀 7、闭运算 先膨胀再腐蚀 8、礼帽 原始数据-开运算结果 9、黑帽 闭运算结果-原始数据 10、Sobel算子 左-右&#x…

在Qt中List View和List Widget的区别是什么,以及如何使用它们

2023年10月29日&#xff0c;周日晚上 目录 List View和List Widget的区别 如何使用QListView 如何使用QListWidget List View和List Widget的区别 在Qt中&#xff0c;QListView 和 QListWidget 是用于显示列表数据的两个常用控件&#xff0c;它们有一些区别和特点。 1. 数…

解析电源模块功能测试项目 电源模块测试系统助力功能测试

电源测试一般包括保护特性测试、安规测试、电磁兼容测试、可靠性测试、功能测试以及其它一些特定测试。电源功能测试是评估电源质量好坏、性能、响应等的重要测试方法&#xff0c;也是电源的常规测试内容。 电源功能测试项目 电源功能测试是确保电源稳定性和可靠性的重要测试指…

华为OD机试 - 寻找身高相近的小朋友 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Linux————内置命令大全

&#xff08;一&#xff09;内置命令 Shell 内置命令&#xff0c;就是由 Bash Shell 自身提供的命令&#xff0c;而不是文件系统中的可执行脚本文件。内置命令的执行速度通常优于外部命令&#xff0c;因为执行外部命令不仅会导致磁盘I/O操作&#xff0c;而且还需要为其fork一个…

如何提高Python图像表格数据提取的准确率?

Python图像表格数据提取 1、数据来源2、目标图像3、图像文本提取4、图像灰度化与二值化可以提高识别准确率吗1、数据来源 国家统计局:http://www.stats.gov.cn/sj/ 数据来源:国家统计局中国统计年鉴2022年人口数及构成 2、目标图像 数据(部分)如下: 数据形式:http://www…

windows server 2016调优

1. 增加TCP连接的最大数量&#xff1a; 在您当前的注册表路径&#xff08;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters&#xff09;中的右侧窗格&#xff0c;右击空白处&#xff0c;选择“新建” -> “DWORD (32位) 值”。为新的值命名为TcpNu…

万宾科技管网水位监测预警,管网水位的特点有哪些?

以往如果要了解城市地下排水管网的水位变化&#xff0c;需要依靠人工巡检或者排查的方式&#xff0c;这不仅加大了人员的工作量&#xff0c;而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况&#xff0c;都会降低市政府对排水管网的管理能力&a…

【C++代码】编辑距离,最长递增子序列,最长连续递增序列,最长重复子数组,最长公共子序列,不相交的线,动态规划--代码随想录

题目&#xff1a;最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,…

uniapp在APP端使用swiper进行页面不卡顿滑动

uniapp在APP端使用swiper进行页面会卡顿&#xff0c;主要是渲染的数据有点多&#xff0c;这里只渲染三个数据就不好那么卡顿了&#xff0c;每次滑动后更新数据 <view><swiper change"changePoint" circular :disable-touch"disableTouch"><…

JAVA代码审计-cms综合篇

前言 JEECGv3.8。下载地址&#xff1a;GitHub - jeecgboot/jeecg at v3.8 java代码审计第一步&#xff1a;查看web.xml 一个重要的servlet&#xff1a;DispatcherServlet&#xff0c; <servlet><description>spring mvc servlet</description><servle…

MySQL缩短查询时间小技巧

背景 今天我要统计数据表的最新更新时间&#xff0c;有些表数据量特别大&#xff0c;所以统计比较费时间&#xff0c;但是如果使用一下小技巧&#xff0c;就会极大加快查询时间&#xff0c;适合小白的调优手段。 查询更新时间 select max(update_time) from test大概表的行数…

2024上海国际人工智能展(CSITF)“创新驱动发展·科技引领未来”

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;作为当今世界科技发展的关键领域之一&#xff0c;正不断推动着各行各业的创新和变革。作为世界上最大的消费市场之一&#xff0c;中国正在积极努力将AI技术与产业融合并加速推广应用。在这个背景下&…

一次cs上线服务器的练习

环境&#xff1a;利用vm搭建的环境 仅主机为65段 测试是否能与win10ping通 配置转发 配置好iis Kali访问测试 现在就用burp抓取winser的包 开启代理 使用默认的8080抓取成功 上线
最新文章