2024-05-31 blue-VH-driver-问题分析-有状态的服务-状态的处理

摘要:

VH的driver对上层提供的接口,是会保持状态。这个状态,可以分为,查询的数据的状态,主要是为了提供翻页查询的功能。另一种状态,就是订阅。

有状态的服务:

  1. 状态是什么? 其实从调用方的角度更好的理解,会话的保持,查询的数据的保持,调用层已经订阅过的东西
  2. 那么服务的状态,会如何影响设计呢? 最核心的是对于状态的保持,状态什么会丢失?当下层VH服务,断线重连后,下层的VH服务,是不会保持已经订阅的东西,那么如何做呢?
  3. 另一种就是查询的缓存的保持,断线重连之后,缓存是如何做?

状态处理:

一. 查询的保持

查询的并发控制

  1. 查询的处理,被包装成task, 然后task交由线程池去执行。
  2. 这样就遇到了关于多个线程的同步的问题
    1. 调用方的调用线程A
    2. 线程池里用于执行task的线程B
    3. VH回调数据的线程C
  3. 这三个线程,执行task的线程B,与VH回调函数的线程C,同时去访问同一块数据队列。 线程B向队列写数据,线程C从队列里都数据。所以线程B和线程C,要使用同一个锁。
  4. 调用方的调用线程A,去读取task的是否完成的状态。线程B里,更新task的状态。所以线程A和线程B,同时访问这个状态。线程A和线程B,对于状态的访问,要使用同一个锁。

查询的缓存数据的保持

  1. 主要出现在VH断线重连了之后,查询到的数据是否要缓存
  2. 从缓存的角度上,上次查询已经完成,断线重连,不影响已经查询到的数据
  3. 所以即使是短线重连,查询的缓存的数据也要保持

二. 订阅的保持

VH断线重连后driver重新订阅:

  1. 如果VH数据库断线重连,但是不保持此前连接的订阅,那么就必须driver在重新订阅后重新订阅。
  2. 这就需要driver记录之前的订阅,在断线重连了之后,重新订阅。

VH订阅数量的限制:

  1. 调用方给出了一堆要订阅的,但是如果超出VH数据库的接口的订阅的数量的限制,那么就需要多次去订阅
  2. 多次去订阅,是要在driver中去处理。这块要独立的去设计。

问题分析:

组态的业务:

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

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

相关文章

进程与线程(三)

进程与线程(三) 进程间通信传统间的进程间通信机制无名管道无名管道的特征无名管道的创建父子进程通信测试管道的大小管道读写易出现的问题 有名管道创建有名管道有名管道的写端代码有名管道的读端代码 信号信号的特征产生信号硬件来源软件来源发送信号的…

【MATLAB】概述1

非 ~ 注释 % 定义 >> 数组 赋值 赋值:>> x1 函数 数组 x[x1,x2] 行向量(,or ) x[x1;x2] 列向量 x. 转置等间隔向量 1-10 向量:>>xlinspace(1,10,10) 矩阵 矩阵:>>A[1,2,3;4,5,6;7,8,9] …

重生之 SpringBoot3 入门保姆级学习(10、日志基础与使用)

重生之 SpringBoot3 入门保姆级学习(10、日志基础使用) 3.1 日志基础3.2 使用日志3.2.1 基础使用3.2.2 调整日志级别3.2.3 带参数的日志 3.1 日志基础 SpringBoot 默认使用 SLF4j(Simple Logging Facade for Java)和 Logback 实现…

Django ORM魔法:用Python代码召唤数据库之灵!

探索Django ORM的神奇世界,学习如何用Python代码代替复杂的SQL语句,召唤数据库之灵,让数据管理变得轻松又有趣。从基础概念到高级技巧,阿佑带你一步步成为Django ORM的魔法师,让你的应用开发速度飞起来! 文…

Adobe Acrobat DC无法卸载

控制版面、电脑管家等均无法卸载,使用自身的remove也不能卸载 解决方法:删除Adobe Acrobat DC的注册表 1、首先打开注册列表: 2、根据圈出来的信息,找到以下路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Inst…

c++车票管理系统

这里写自定义目录标题 c车票管理系统vx:sredxc车票管理系统初始页面,需要源码vx:sredxc新增车票信息查询车票信息代码包含完整的发布车票信息,购票,退票,票数检测,余票检测,车票查询等功能 c车票管理系统vx:sredxc 这段代码实现了一个简单的高铁票务管理系统,具有以…

动态路由OSPF单区域和多区域配置实验

动态路由OSPF的配置 OSPF分类两种情况:单区域 多区域路由 OSPF单区域路由配置 OSPF:开放最短路径优先的路由协议。属于大型动态路由协议,适用于中大型的园区网。 网络拓扑: 配置步骤: 1.完成基本配置(略&…

如何在测试/线上环境页面访问本地接口?

文章目录 一、前言二、分析三、搭建1、搭建nginx,监听http请求转发2、监听https请求转发 四、总结 一、前言 在工作中,开发完的接口,一般测试的话,基本是使用Postman,如果要到页面测试,就要发版进行测试&a…

5.29工效学-人因工程人机交互

对于工效学这门课,一直都感觉很有意思,是一个值得再认真一点的课。可惜上课的时候效率不高,有感兴趣的东西课后也没有自行去拓展开来,前面的课我感觉还讲了比较重要的东西,但是,全忘了呢(真的对…

8、资源操作 Resource

目录 8.1、Spring Resources概述补充:什么是 low-level 资源?1. 文件系统资源2. 类路径资源3. URL资源4. 内嵌资源5. InputStream资源6. ServletContext资源示例代码结论 8.2、Resource接口8.3、Resource的实现类8.3.1、UrlResource访问网络资源1&#x…

华为设备配置静态路由和默认路由

华为设备配置静态路由和默认路由 理论部分知识: 路由分为两个大类:静态路由-----动态路由 静态路由:手工指定,适用于小规模的网络应用场景,如果网络规模变大,这样的方式非常不适合而且容易出错。 语法&…

C#使用GDI对一个矩形进行任意角度旋转

C#对一个矩形进行旋转GDI绘图,可以指定任意角度进行旋转 我们可以认为一张图片Image,本质就是一个矩形Rectangle,旋转矩形也就是旋转图片 在画图密封类 System.Drawing.Graphics中, 矩形旋转的两个关键方法 //设置旋转的中心点 public v…

初识C++ · 模拟实现list

目录 前言 1 push_back pop_back 2 迭代器类 2.1 ! 2.2 -- 2.3 * 3 Print_List 4 有关自定义类型 5 有关const迭代器 6 拷贝构造 赋值 析构 Insert erase 前言 有了string,vector的基础,我们模拟实现list还是比较容易的,这里同…

基于LQR控制算法的电磁减振控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于LQR控制算法的电磁减振控制系统simulink建模与仿真。仿真输出控制器的收敛曲线。 2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a 08_029m 4.系统原理…

XXE漏洞简介

目录 漏洞原理 漏洞危害 前置知识 XML简介 DTD简介 DTD的两种声明方式 实体 实体分类 内置实体(Built-inentities) 字符实体(Characterentities) 通用实体(Generalentities) 参数实体(Parameterentities) XXE漏洞…

算法每日一题(python,2024.05.24) day.6

题目来源(力扣. - 力扣(LeetCode),简单) 解题思路: 排序+双指针 先将两个数组进行排序,cursor1和cursor分别指向两个数组的首位,比较两个指针所指的值的大小&#xff0…

iotdb时序库在火电设备锅炉场景下的实践【原创文字,IoTDB社区可进行使用与传播】

一.概述 1.1 说明 本文章主要介绍iotdb数据库在电站锅炉工业场景下,对辅助智能分析与预警的使用介绍。 【原创文字,IoTDB社区可进行使用与传播】 1.2 项目背景 随着人工智能算法在电力领域的发展,以及燃煤锅炉设备精细化调整需求的增加&…

Java Apache Jaccard文本相似度匹配初体验

文章目录 前言一、文本相似度算法的选择二、常见的文本相似度算法介绍三、使用示例1、引入jar包2、方法示例3、Jaccard源码剖析4、Jaccard源码解释 写在最后 前言 产品今天提了个需求,大概是这样的,来,请看大屏幕。。。额。。。搞错了&#…

系统思考—思考快与慢

“膝反射思考做决策,你的公司能走多远?” 在快节奏的商业环境中,我们的大脑往往默认采用“快速直觉反应”模式来做决策,这种方式节省能量,属于我们认知的“系统一”。然而,仅依靠直觉反应,即所…

go中的指针详解

因为大一的时候c语言没学好,所以看到指针很心烦 ,后来速成了一遍go ,每每写道指针部分就开始遗忘 ,所以专门对指针部分做了此笔记 概念 在 Go 语言中,指针是一种变量类型,它存储的是另一个变量的内存地址。通过指针,你可以访问和修改它指向…