当前位置: 首页 > news >正文

rabbitmq承接MES客户端服务器

文章目录

      • 背景
      • 整体架构概述
      • 方案详细步骤
        • 1. 数据库选型与搭建
        • 2. 设备端数据上传至数据库
        • 3. 搭建 RabbitMQ 服务器
        • 4. 数据同步模块(数据库到 RabbitMQ)
        • 5. MES 服务器从 RabbitMQ 接收数据
        • 6. 指令接收模块(RabbitMQ 到设备端)
      • 7. MES 服务器发送指令到 RabbitMQ
      • 方案优势
      • 注意事项

背景

在非标设备里,经常需要用到mes上传数据给客户服务器,然而不同的客户需求不同,即便是同一个客户,也经常改动接口,随之而来的就需要经常改动设备代码,为了降低设备软件和客户mes服务器之间的强耦合,在非标设备和客户 MES 服务器之间添加 RabbitMQ 中间层,实现生产数据上传和指令接收,同时避免对设备代码进行大幅修改。但是不能完全避免修改设备代码。

整体架构概述

此方案的核心是在非标设备软件和客户 MES 服务器之间引入 RabbitMQ 作为中间层。非标设备将生产数据上传至本地数据库,然后由数据同步模块从数据库中读取数据并发送到 RabbitMQ。客户 MES 服务器从 RabbitMQ 接收数据。同时,MES 服务器可以将启动、暂停等指令发送到 RabbitMQ,设备端的指令接收模块从 RabbitMQ 接收这些指令并执行相应操作。

方案详细步骤

1. 数据库选型与搭建
  • 选型:根据设备数据量和性能需求,选择合适的数据库。如果数据量较小且对实时性要求不高,可以选择 SQLite;如果数据量较大且需要高并发处理,建议选择 MySQL 或 PostgreSQL,sqlserver。
  • 搭建:安装并配置所选数据库,创建相应的数据库和表来存储生产数据。以下是一个使用 MySQL 存储生产数据的示例 SQL 脚本:
-- 创建数据库
CREATE DATABASE device_data;-- 使用数据库
USE device_data;-- 创建产能表
CREATE TABLE production_capacity (id INT AUTO_INCREMENT PRIMARY KEY,device_id VARCHAR(50),capacity INT,record_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 创建报警信息表
CREATE TABLE alarm_info (id INT AUTO_INCREMENT PRIMARY KEY,device_id VARCHAR(50),alarm_message TEXT,alarm_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 创建运行状态表
CREATE TABLE running_status (id INT AUTO_INCREMENT PRIMARY KEY,device_id VARCHAR(50),status VARCHAR(20),status_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 设备端数据上传至数据库
  • 修改设备代码:在不进行大幅修改的前提下,在设备代码中添加将生产数据插入数据库的逻辑。以下是一个使用 Python 和 MySQL 数据库的示例代码:
import mysql.connector# 连接数据库
mydb = mysql.connector.connect(host="localhost",user="your_username",password="your_password",database="device_data"
)mycursor = mydb.cursor()# 模拟设备生产数据
device_id = "device_001"
capacity = 100
alarm_message = "温度过高"
status = "运行中"# 插入产能数据
sql = "INSERT INTO production_capacity (device_id, capacity) VALUES (%s, %s)"
val = (device_id, capacity)
mycursor.execute(sql, val)
mydb.commit()# 插入报警信息
sql = "INSERT INTO alarm_info (device_id, alarm_message) VALUES (%s, %s)"
val = (device_id, alarm_message)
mycursor.execute(sql, val)
mydb.commit()# 插入运行状态数据
sql = "INSERT INTO running_status (device_id, status) VALUES (%s, %s)"
val = (device_id, status)
mycursor.execute(sql, val)
mydb.commit()mydb.close()
3. 搭建 RabbitMQ 服务器
  • 安装:根据操作系统类型,选择合适的方式安装 RabbitMQ 服务器。例如,在 Ubuntu 系统上可以使用以下命令进行安装:
sudo apt-get update
sudo apt-get install rabbitmq-server
  • 配置:启动 RabbitMQ 服务器,并进行必要的配置,如创建用户、虚拟主机等。以下是创建一个新用户并授予权限的示例命令:
sudo rabbitmqctl add_user your_username your_password
sudo rabbitmqctl add_vhost your_vhost
sudo rabbitmqctl set_permissions -p your_vhost your_username ".*" ".*" ".*"
4. 数据同步模块(数据库到 RabbitMQ)
  • 开发思路:编写一个数据同步脚本,定期从数据库中读取最新的生产数据,并将其发送到 RabbitMQ 的相应队列中。
  • 示例代码:以下是一个使用 Python 和 pika 库实现的示例代码:
import mysql.connector
import pika# 连接数据库
mydb = mysql.connector.connect(host="localhost",user="your_username",password="your_password",database="device_data"
)mycursor = mydb.cursor()# 连接 RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明队列
channel.queue_declare(queue='production_capacity_queue')
channel.queue_declare(queue='alarm_info_queue')
channel.queue_declare(queue='running_status_queue')# 同步产能数据
mycursor.execute("SELECT * FROM production_capacity WHERE id > (SELECT IFNULL(MAX(id), 0) FROM synced_production_capacity)")
results = mycursor.fetchall()
for row in results:message = f"Device ID: {row[1]}, Capacity: {row[2]}, Record Time: {row[3]}"channel.basic_publish(exchange='', routing_key='production_capacity_queue', body=message)# 标记已同步的数据sql = "INSERT INTO synced_production_capacity (id) VALUES (%s)"val = (row[0],)mycursor.execute(sql, val)
mydb.commit()# 同步报警信息和运行状态数据的逻辑类似connection.close()
mydb.close()
5. MES 服务器从 RabbitMQ 接收数据
  • 开发思路:在客户 MES 服务器端编写代码,连接到 RabbitMQ 并从相应队列中接收生产数据。
  • 示例代码:以下是一个使用 Python 和 pika 库实现的示例代码:
import pikadef callback(ch, method, properties, body):print(f"Received: {body.decode()}")connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明队列
channel.queue_declare(queue='production_capacity_queue')
channel.queue_declare(queue='alarm_info_queue')
channel.queue_declare(queue='running_status_queue')# 消费产能数据
channel.basic_consume(queue='production_capacity_queue', on_message_callback=callback, auto_ack=True)print('Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
6. 指令接收模块(RabbitMQ 到设备端)
  • 开发思路:在设备端编写一个指令接收脚本,连接到 RabbitMQ 并从相应队列中接收启动、暂停等指令,然后执行相应操作。
  • 示例代码:以下是一个使用 Python 和 pika 库实现的示例代码:
import pikadef callback(ch, method, properties, body):command = body.decode()if command == "start":# 执行启动设备的操作print("Starting the device...")elif command == "pause":# 执行暂停设备的操作print("Pausing the device...")connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明指令队列
channel.queue_declare(queue='device_command_queue')# 消费指令
channel.basic_consume(queue='device_command_queue', on_message_callback=callback, auto_ack=True)print('Waiting for commands. To exit press CTRL+C')
channel.start_consuming()

7. MES 服务器发送指令到 RabbitMQ

  • 开发思路:在客户 MES 服务器端编写代码,连接到 RabbitMQ 并将启动、暂停等指令发送到相应队列中。
  • 示例代码:以下是一个使用 Python 和 pika 库实现的示例代码:
import pikaconnection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 声明指令队列
channel.queue_declare(queue='device_command_queue')# 发送启动指令
channel.basic_publish(exchange='', routing_key='device_command_queue', body='start')connection.close()

方案优势

  • 降低耦合度:通过引入 RabbitMQ 中间层,将设备端和 MES 服务器解耦,减少了对设备代码的修改。
  • 提高可靠性:RabbitMQ 具有消息持久化和重试机制,确保数据传输的可靠性。
  • 易于扩展:可以方便地添加新的设备或修改数据格式,而不会影响整个系统的稳定性。

注意事项

  • 数据一致性:确保数据库和 RabbitMQ 之间的数据同步一致性,避免数据丢失或重复。

  • 性能优化:根据实际需求对数据库和 RabbitMQ 进行性能优化,如调整队列大小、设置合适的并发数等。

  • 安全性:对 RabbitMQ 进行安全配置,如设置访问权限、使用 SSL 加密等,确保数据传输的安全性。

  • 假如是一条生产线,那么只需要将rabbitmq部署到局域网,专门开发一个软件负责rabbitmq的数据维护,其他设备只需要按照要求,上传需要的数据,然后根据客户要求在合适的地方触发数据上传,比如将数据库某个字段设置成1 , rabbitmq维护软件读取到1后,开始将数据库里的数据进行组合封装,发送给rabbitmq , mes服务器从rabbitmq接收数据,最好采用rabbitmq的订阅模式,以上整体方案已经用python 和C++跑通,暂未正式发布,后续肯定会遇到其他问题,到时再更新

相关文章:

rabbitmq承接MES客户端服务器

文章目录 背景整体架构概述方案详细步骤1. 数据库选型与搭建2. 设备端数据上传至数据库3. 搭建 RabbitMQ 服务器4. 数据同步模块(数据库到 RabbitMQ)5. MES 服务器从 RabbitMQ 接收数据6. 指令接收模块(RabbitMQ 到设备端) 7. MES…...

重学vue3(三):vue3基本语法及使用

组合式 API是vue3 的核心特性&#xff0c;替代 Vue2 的选项式 API&#xff0c;强调逻辑复用和代码组织。基本语法如下&#xff1a; <script setup> import { ref, reactive, computed, onMounted } from vue;// 1. 响应式数据 const count ref(0); // 基本类…...

算法 | 麻雀搜索算法原理,公式,改进算法综述,应用场景及matlab完整代码

一、麻雀搜索算法(SSA)原理 1. 算法基础 麻雀搜索算法(Sparrow Search Algorithm, SSA)是2020年提出的一种群体智能优化算法,灵感来源于麻雀群体的觅食与反捕食行为。算法将麻雀分为三类角色:发现者(Producer):适应度最高,负责探索全局最优区域;加入者(Follower)…...

0322-数据库与前后端的连接、数据库表的增删改查

前端 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here</title> <script srcjs/jquery-3.7.1.min.js></script> <script> //jquaryajax发起请求 //传参形式不同 post用data{}…...

详细介绍Qt中用于断言的宏 Q_ASSERT

Q_ASSERT 是 Qt 框架中用于调试的核心宏之一&#xff0c;其作用类似于标准 C/C 的 assert&#xff0c;但针对 Qt 的特性进行了优化。它用于在开发阶段验证程序的逻辑正确性&#xff0c;帮助开发者快速定位潜在的错误。 1.基本用法 Q_ASSERT(condition);功能&#xff1a;在调试…...

基于Python的自然语言处理系列(60):使用 LangChain 构建 Multi-Vector Retriever 进行文档检索

在 NLP 和 AI 领域&#xff0c;基于嵌入&#xff08;Embeddings&#xff09;进行文档检索已成为一种高效的解决方案。本文介绍如何使用 LangChain 构建 Multi-Vector Retriever&#xff0c;实现对长文档的分块索引和高效检索。 1. 环境准备 首先&#xff0c;我们需要安装相关…...

Dify 部署指南-离线版

Docker 部署 1、 访问 Docker 官网 (https://www.docker.com/) 获取安装包。 2、 上传 Docker 安装包 3、 进入解压目录&#xff0c;执行解压命令 tar xzvf docker-28、0.2、tgz4、 将解压文件中的 Docker 相关文件移动到 /usr/bin/ 目录 sudo cp docker/* /usr/bin/5、 创建…...

解决 Element UI 嵌套弹窗的状态管理问题!!!

解决 Element UI 嵌套弹窗的状态管理问题 &#x1f527; 问题描述 ❓ 在使用 Element UI 开发一个多层嵌套弹窗功能时&#xff0c;遇到了以下问题&#xff1a; 弹窗只能打开一次&#xff0c;第二次点击无法打开 &#x1f6ab;收到 Vue 警告&#xff1a;避免直接修改 prop 值…...

基于STM32单片机的智能手环/音乐播放/语音识别

基于STM32单片机的智能手环/音乐播放/语音识别 持续更新&#xff0c;欢迎关注!!! ** 基于STM32单片机的智能手环/音乐播放/语音识别 ** 21世纪&#xff0c;社会高速发展&#xff0c;生活物质越来越丰富&#xff0c;随着科技的进步&#xff0c;智能化成为了人们关注的焦点&am…...

NFC 智能门锁全栈解决方案:移动端、服务器、Web 管理平台

目录 一、系统整体架构 二、移动端 APP 开发 2.1 开发环境与基础准备 2.2 主要功能模块 2.3 示例代码&#xff08;Android/Kotlin 简化示例&#xff09; 三、后台服务开发 3.1 环境准备 3.2 主要功能 3.3 示例代码&#xff08;Node.js Express 简化示例&#xff09; …...

使用 Python 开发 MCP Server 及 Inspector 工具详解

使用 Python 开发 MCP Server 及 Inspector 工具详解 前言 模型上下文协议 (Model Context Protocol, MCP) 是一种新兴的协议&#xff0c;旨在让大型语言模型 (LLM) 更容易地与外部工具和服务集成。本文将介绍如何使用 Python 开发一个 MCP Server&#xff0c;并详细讲解如何使…...

论坛系统测试报告

一、项目背景 为论坛系统项目设计并进行自动化测试。论坛系统由六个页面构成&#xff1a;用户登录页、用户注册页、个人中心页面、我的帖子页面、帖子编辑页、帖子列表页以及帖子详情页。 通过使用selenium工具来定位到web中的元素&#xff0c;对获取到的元素进行自动化测试等操…...

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含5个系统自动创建的线程,具体如下: Main线程(主线程/UI线程) 负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应…...

DML 数据操纵语言学习笔记

一、DML 核心概念体系 1.1 语言定位与边界 DML&#xff08;Data Manipulation Language&#xff09;作为 SQL 三大核心语言之一&#xff0c;专注于数据行级操作&#xff0c;区别于 DDL&#xff08;结构定义&#xff09;和 DCL&#xff08;权限控制&#xff09;。其核心指令包…...

7-Zip 功能介绍

7-Zip 是一款开源、高效的文件压缩与解压缩工具&#xff0c;支持多种格式&#xff0c;以高压缩率和灵活性著称。以下是其核心功能&#xff1a; 多格式支持 压缩 / 解压&#xff1a;支持 7z&#xff08;默认格式&#xff0c;压缩率极高&#xff09;、ZIP、RAR、GZIP、BZIP2、TAR…...

《基于python游戏设计与实现》开题报告

个人主页:@大数据蟒行探索者 一、研究背景、目的及意义 (一)研究背景 游戏的普及与成功:随着智能手机的普及和网络技术的发展,手机游戏产业逐渐成熟,成为娱乐文化产业的重要组成部分。《开心消消乐》作为一款休闲类游戏,自上线以来凭借其简单易上手的玩法和丰富的…...

鸿蒙学习笔记(3)-像素单位、this指向问题、RelativeContainer布局、@Style装饰器和@Extend装饰器

一、像素单位 物理像素&#xff1a;用px表示。 逻辑像素&#xff1a;在布局的时候&#xff0c;底层针对物理像素和屏幕尺寸关系进行转化的中间层。 分辨率&#xff1a;代表在屏幕上到底布局了多少了像素点&#xff08;发光点) 官方同时也提供了相关单位&#xff0c;在开发中…...

Selenium之简介

Selenium简介 首先&#xff0c;让我们看看官网是怎么定义的 Selenium是一个支持web浏览器自动化的一系列工具和库的综合项目&#xff0c;提供了扩展来模拟用户和浏览器的交互&#xff0c;用于扩展浏览器分配的分发服务器&#xff1b;用于W3C WebDriver规范的基础架构 其实&a…...

使用Ollama(自定义安装位置)与RagFlow构建本地知识库

目录 1. 为什么不直接使用网页版DeepSeek?2. 如何实现网页版DeepSeek不能实现的需求?3. 目标效果预览4. 为什么要使用RAG技术?RAG和模型微调的区别?5. 什么是Embedding?为什么需要“Embedding模型”?6. 本地部署全流程6.1 下载ollama&#xff0c;通过olama将DeepSeek模型…...

基于ssm的医院预约挂号系统

一、系统架构 前端&#xff1a;jsp | bootstrap | jquery | css | ajax 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat 二、代码及数据 三、功能介绍 01. 注册 02. 登录 03. 首页 04. 医院挂号 05. …...

如何通过less在vue2中达到切换皮肤的目的

先装less npm install less less-loader --save-dev 然后将该 loader 添加到 webpack 的配置中去&#xff0c;例如&#xff1a; webpack.config.js module.exports {module: {rules: [{test: /\.less$/i,use: [// compiles Less to CSSstyle-loader,css-loader,less-loade…...

DeepSeek概述

一、DeepSeek概述 1.1 DeepSeek是什么 DeepSeek是一家专注 通用人工智能&#xff08;AGI&#xff0c;Artificial General Intelligence&#xff09;的中国科技公司&#xff0c;主攻大数据研发与应用。DeepSeek-R1是其开源的推理模型&#xff0c;擅长处理复杂任务且可免费商用…...

生成模型速通(Diffusion,VAE,GAN)

基本概念 参考视频https://www.bilibili.com/video/BV1re4y1m7gb/?spm_id_from333.337.search-card.all.click&vd_sourcef04f16dd6fd058b8328c67a3e064abd5 生成模型其实是主要是依赖概率分布&#xff0c;对输入特征的概率密度函数建模 隐空间&#xff08;latent space)…...

linux/android 如何获取当前系统启动时长

uptime 指令获取 trinket:/ # uptime12:03:31 up 3 min, 0 users, load average: 1.02, 0.68, 0.29...

Elasticsearch客户端工具初探--kibana

1 Kibana简介 Kibana是Elastic Stack&#xff08;ELK&#xff09;中的可视化工具&#xff0c;用于对Elasticsearch中存储的数据进行搜索、分析和可视化展示。它提供了直观的Web界面&#xff0c;支持日志分析、业务监控、数据探索等功能&#xff0c;广泛应用于运维监控、安全分析…...

深克隆和浅克隆(建造者模式,内含简版)

让我们来看一个例子&#xff1a; 设计一个客户类Customer&#xff0c;其中客户地址存储在地址类Address中&#xff0c;用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。 代码实现 Customer类和Address类都是实现的Java 内置的 java.lang.Cloneable …...

吴恩达机器学习笔记复盘(十二)逻辑回归的梯度下降和拟合问题

梯度下降算法推导过程 一、逻辑回归模型基础 逻辑回归用于二分类问题&#xff0c;其假设函数为sigmoid函数&#xff1a; 其中&#xff0c;是模型参数向量&#xff0c;是特征向量。输出表示样本属于正类的概率。 二、损失函数 逻辑回归的损失函数采用 对数损失&#xff08;交…...

OSPF五种报文分析(仅部分比较重要的)

OSPF五种报文分别是&#xff1a; hello报文&#xff0c;DBD数据库描述报文&#xff0c;LSR链路状态请求报文&#xff0c;LSU链路状态更新报文&#xff0c;LSACK链路状态确认包 以下是这五种报文的详细解读&#xff1a; 1. Hello报文 作用&#xff1a; 用于邻居的发现、建立和…...

Ubuntu 22.04 二进制安装单节点 MySQL

Ubuntu 22.04 二进制安装 MySQL LTS&#xff08;长期支持版&#xff09;完整教程 MySQL LTS 版本选择&#xff1a; 目前 MySQL 8.4.4 是长期支持&#xff08;LTS&#xff09;版本&#xff0c;持续更新并保持稳定。 下载版本&#xff1a; 你也可以在 MySQL 官方网站确认最新稳…...

python处理音频相关的库

1 音频信号采集与播放 pyaudio import sys import pyaudio import wave import timeCHUNK 1024 FORMAT pyaudio.paInt16 CHANNELS 1#仅支持单声道 RATE 16000 RECORD_SECONDS 3#更改录音时长#录音函数&#xff0c;生成wav文件 def record(file_name):try:os.close(file_…...

python+ffmpeg给音频添加背景音乐

说明&#xff1a; 我希望用python&#xff0c;将name.mp3这段录音文件&#xff0c;添加背景音乐&#xff0c;bg.mp3&#xff0c;然后生成新的文件 step1: 添加依赖 pip install pydubstep2:下载ffmpeg 1.打开windows powershell &#xff0c;管理员运行 2.winget install ff…...

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊&#xff01;能把那天没唱的歌再唱给我听吗&#xff1f; ” 前言 因为主包还是主要学习js&#xff0c;ts浅浅的学习了一下&#xff0c;在简历中我也只会写了解&#xff0c;所以我写一些比较基础的八股&#xff0c;如果是想要更深入的八股的话还是建议找别人的。 Ts基…...

鸡生蛋还是蛋生鸡? 基于python的CCM因果关系计算

文章目录 前言一、安装二、代码1.全部代码2.结果展示总结前言 因果推断在科学研究中起着重要的作用,尤其是在复杂系统中,例如生态学、气候学、经济学等领域。在这些领域中,了解变量之间的因果关系可以帮助我们更好地理解系统的动态行为和相互作用。传统的相关性分析并不足以…...

PyBluez2 的详细介绍、安装指南、使用方法及配置说明

PyBluez2&#xff1a;Python 蓝牙开发的核心库 一、PyBluez2 简介 PyBluez2 是 Python 的开源蓝牙编程库&#xff0c;支持蓝牙 2.0、BLE&#xff08;低功耗蓝牙&#xff09;和传统蓝牙协议栈的开发。它提供了对蓝牙硬件适配器的底层控制&#xff0c;适用于设备发现、配对、数…...

鸿蒙HarmonyOS NEXT之无感监听

鸿蒙中存在一些无感监听&#xff0c;这些监听经过系统API封装使用很简单&#xff0c;但是对实际业务开发中有很重要&#xff0c;例如埋点业务、数据统计、行为上报、切面拦截等。 Navigation的页面切换 在鸿蒙中Navigation被用来作为路由栈进行页面跳转&#xff0c;如果你想知…...

质检LIMS系统在食品生产加工企业的应用 如何保证食品生产企业的安全

在食品生产加工领域&#xff0c;质量安全是贯穿全产业链的生命线。随着《食品安全法》对全过程追溯要求的深化&#xff0c;传统实验室管理模式已难以满足高效、精准的质量管控需求。质检实验室信息管理系统&#xff08;LIMS&#xff09;作为数字化升级的核心工具&#xff0c;正…...

linux中如何获取其他进程的退出状态

进程的退出状态至关重要&#xff0c;用wait系列函数&#xff0c;父进程可以捕捉到子进程的退出状态&#xff0c;若给定任意进程&#xff0c;其父进程已经确定&#xff0c;无法改变&#xff0c;自己如何获取到其退出状态呢。 可以用ptrace系统api attach到相应的进程&#xff0c…...

【android】补充

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…...

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战 引言 在分布式系统和本地服务通信中&#xff0c;进程间通信&#xff08;IPC&#xff09;与远程过程调用&#xff08;RPC&#xff09;是核心能力。本文将深入剖析 Unix Domain Socket&#xff08;UDS&#xff09;、IPC、RP…...

从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?

小T导读&#xff1a;TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务&#xff0c;轻松应对海量功率、电能及输入输出数据的实时统计与分析&#xff0c;并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外&#xff0c;taosX 强大的 transform 功能帮助用…...

华为OD机试A卷 - 积木最远距离(C++ Java JavaScript Python )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处…...

Zerotier虚拟局域网在树莓派的应用和Syncthing配合Zerotier实现端到端文件同步

一、Zerotier的部署 1、官网注册账号 https://my.zerotier.com/i 2、选择linux系统&#xff0c;执行安装Zerotier curl -s https://install.zerotier.com | sudo bash3、将树莓派网络加入Zerotier zerotier-cli join DB62228FEDF6CE55DB62228FEDF6CE55 为你的Zerotier IP 需…...

C++设计模式-桥梁模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

一、桥梁模式基本介绍 桥梁模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;又叫桥接模式&#xff0c;其核心思想是将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合代替继承&#xff0c;有效解决了多层继承导致的类爆…...

系统转换、系统维护、净室软件工程、构件软件工程(高软51)

系列文章目录 系统转换、系统维护、净室软件工程、构件软件工程 文章目录 系列文章目录前言一、系统转换二、系统维护三、净室软件工程四、基于构件的软件工程总结 前言 本节讲明遗留系统的系统转换、系统维护、净室软件工程、基于构件软件工程相关知识。 一、系统转换 就是讲…...

自然语言处理(13:RNN的实现)

系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设&#xff0c;共现矩阵&#xff0c;向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...

Docker镜像迁移方案

Docker镜像迁移方案 文章目录 Docker镜像迁移方案一&#xff1a;背景二&#xff1a;操作方式三&#xff1a;异常原因参考&#xff1a; 一&#xff1a;背景 比如机器上已经有先有的容器&#xff0c;但是docker pull的时候是失败的二&#xff1a;操作方式 1、停止正在运行的容器…...

深度学习框架PyTorch——从入门到精通(10)PyTorch张量简介

这部分是 PyTorch介绍——YouTube系列的内容&#xff0c;每一节都对应一个youtube视频。&#xff08;可能跟之前的有一定的重复&#xff09; 创建张量随机张量和种子张量形状张量数据类型 使用PyTorch张量进行数学与逻辑运算简单介绍——张量广播关于张量更多的数学操作原地修改…...

Springboot 集成 Flowable 6.8.0

1. 创建 Spring Boot 项目 通过 Spring Initializr&#xff08;https://start.spring.io/ &#xff09;创建一个基础的 Spring Boot 项目&#xff0c;添加以下依赖&#xff1a; Spring WebSpring Data JPAMySQL DriverLombok&#xff08;可选&#xff0c;用于简化代码&#x…...

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档&#xff08;带图片&#xff09;预览&#xff0c;并导出 预览安装插件示例代码项目目录结构截图实际效果截图 动态渲染 .docx 文档&#xff08;带图片&#xff09;&#xff0c;预览、导出安装插件docx 模板文件内容完整代码…...

实验一、Linux环境下实现进度条小程序:深入解析核心实现与关键技术细节

目录 引言&#xff1a;为什么需要进度条&#xff1f;环境准备与项目结构分析原理剖析&#xff1a;从终端输出到动态刷新代码逐行解析&#xff08;附完整代码&#xff09; 4.1 头文件与宏定义4.2 进度条的动态构建逻辑4.3 关键转义字符&#xff1a;\r与\n的深度对比4.4 缓冲机制…...