如何在x86模拟器和鸿蒙API9如何使用MQTT模块ohos_mqtt
目录
引言
安装失败的原因
如何编译so文件的x86_64版本
下载源代码
安装NDK
代码编译
安装MQTT软件包
避免MQTT软件包自动升级
设置libs
客户端程序的编写
运行测试
结语
参考文献
引言
在上周的博客(如何在鸿蒙API9和x86模拟器中使用MQTT-CSDN博客)中介绍了我的学生有个需求:他在写鸿蒙APP时无法将MQTT库加入到设备中,由于他没有鸿蒙的真机,只能用DevEco Studio中通过的模拟器来实现,而自带的模拟器只支持API9和API6,而下载的MQTT库是支持API11的。今天就来说说在API9中如何实现MQTT客户端,使用的DevEco Studio版本是3.11。
安装失败的原因
官方有个MQTT软件包:ohpm/mqtt,我写作本文时最新的版本是2.14,针对的是API12。可以将其降级为2.0.5-rc.0或者2.0.6使其支持API9,但是由于其是从C语言版本移植过来的,依赖C语言的库文件(libmqttasync.so),而官方仓库中只提供了ARM版本的,所以在真机上可以用,但是在基于x86的本机模拟器上没法用,会出现”Failure[ERR_INSTALL_PARSE_NATIVE_SO_FAILED]“错误。如果要使用就需要使用NDK重新编译该软件包中C语言文件产生x86可以用的库文件,今天就解决这个问题。
如何编译so文件的x86_64版本
下载源代码
首先需要用git下载mqtt模块的源代码,这里我们下载的是2.0.5版本的源代码,它可以和API9兼容:
git clone -b 2.0.5 --single-branch https://gitee.com/openharmony-tpc/ohos_mqtt.git
由于代码中引用了另外两个子模块,所以也需要下载:
git submodule update --init --recursive
代码下载后,可以看到D:\DevEcoStudioProjects\ohos_mqtt\ohos_Mqtt\src\main\cpp目录中包括NAPI相关的代码。OpenHarmony NAPI 提供了一套接口,使得 ArkTS/TS/JS 与 C/C++ 之间可以进行交互。通过 NAPI,可以实现例如网络通信、串口访问、多媒体解码、传感器数据收集等功能。
安装NDK
要编译NAPI相关的C语言代码就需要安装OpenHarmony NDK。如果以前在DevEco Studio中建立过Native C++工程,则DevEco Studio会自动安装NDK。如果没有安装过,也可以手工安装,选择File|Settings,在其中SDK部分选择Native。
代码编译
在Windows下打开PowerShell,进入C++语言所在目录,使用下面的命令调用CMake生成makefile(命令行中的具体路径取决于用户设置)。
D:\Huawei\SDK\OpenHarmony\9\native\build-tools\cmake\bin\cmake -G Ninja -B out -DCMAKE_TOOLCHAIN_FILE=D:\Huawei\SDK\OpenHarmony\9\native\build\cmake\ohos.toolchain.cmake -DCMAKE_MAKE_PROGRAM=D:\Huawei\SDK\OpenHarmony\9\native\build-tools\cmake\bin\ninja.exe -DCMAKE_BUILD_WITH_INSTALL_RPATH=true -DOHOS_ARCH=x86_64
命令行中的OHOS_ARCH
参数指定生成代码的操作系统的类型,其类型是armeabi-v7a
、x86_64
和arm64-v8a(缺省值)
。我们要使代码能够运行在x86的模拟器上,就需要设置该参数为x86_64。
执行过程如下:
-- The C compiler identification is Clang 12.0.1
-- The CXX compiler identification is Clang 12.0.1
-- Check for working C compiler: D:/Huawei/SDK/openharmony/9/native/llvm/bin/clang.exe
-- Check for working C compiler: D:/Huawei/SDK/openharmony/9/native/llvm/bin/clang.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: D:/Huawei/SDK/openharmony/9/native/llvm/bin/clang++.exe
-- Check for working CXX compiler: D:/Huawei/SDK/openharmony/9/native/llvm/bin/clang++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The ASM compiler identification is Clang
-- Found assembler: D:/Huawei/SDK/openharmony/9/native/llvm/bin/clang.exe
-- Configuring done
-- Generating done
-- Build files have been written to: D:/DevEcoStudioProjects/ohos_mqtt/ohos_Mqtt/src/main/cpp/out
正确生成makefile之后,可以执行如下命令进行编译:
D:\Huawei\SDK\OpenHarmony\9\native\build-tools\cmake\bin\cmake --build out
最后编译成功,我们就得到了x86_64平台下的libmqttasync.so文件。
安装MQTT软件包
在本文写作的时候,ohpm/mqtt最新的版本是2.14,针对的是API12。如果直接在Terminal中使用下面的命令安装的是最新版本。
ohpm install @ohos/mqtt
如果在工程中直接使用最新的这个版本会报告如下错误:
> hvigor ERROR: Failed :entry:default@MergeProfile...
> hvigor ERROR: The compatibleSdkVersion 9 cannot be smaller than version 12 declared in library [:ohos_Mqtt] as the library might be using APIS not available in 9
所以最好的办法是使用老的版本,比如2.0.5-rc.0
ohpm install @ohos/mqtt@2.0.5-rc.0
使用2.06版本也可以,但是需要手工修改oh_modules/.ohpm/@ohos+mqtt@2.0.6/oh_modules/@ohos/mqtt/src/main/module.json文件中的minAPIVersion为9(默认是10)。
{"app": {"bundleName": "cn.openharmony.ohos_mqtt","debug": true,"versionCode": 1000000,"versionName": "2.0.6-rc.0","minAPIVersion": 9,"targetAPIVersion": 10,"apiReleaseType": "Beta2","compileSdkVersion": "4.0.9.6","compileSdkType": "OpenHarmony","bundleType": "app"},"module": {"name": "ohos_Mqtt","type": "har","deviceTypes": ["default","tablet"],"installationFree": false}
}
避免MQTT软件包自动升级
上面的操作虽然可以导入老版本的MQTT包,但是当三方包发布新版本后,点击同步工程,会出现默认更新安装的三方包版本情况。为了避免这种情况,手工修改oh-package.json5,将其中@ohos/mqtt一行版本号前面的“^"符号删除掉,这样保证安装固定版本的三方包。
{"name": "myapplication","version": "1.0.0","description": "Please describe the basic information.","main": "","author": "","license": "","dependencies": {"@ohos/mqtt": "2.0.6"},"devDependencies": {"@ohos/hypium": "1.0.6"},"dynamicDependencies": {}
}
设置libs
在DevEco Studio中,找到oh_modules/.ohpm/@ohos+mqtt@2.0.5/oh_modules/@ohos/mqtt/libs目录,在其下建立x86_64子目录,将libmqttasync.so和libc++_shared.so文件拷贝到其中。其中libc++_shared.so文件来自\Huawei\SDK\openharmony\9\native\llvm\lib\x86_64-linux-ohos\c++(具体路径取决于用户设置)。
客户端程序的编写
客户端程序的编写参考了参考文献中的第一个。
先建立MQTT.ets,内容如下:
import { MqttAsync, MqttClient, MqttPublishOptions, MqttResponse, MqttSubscribeOptions } from '@ohos/mqtt'export class MQTT{private serverUrl: string = 'tcp://bemfa.com:9501'private clientId: string = 'xxxxxx'private userName: string = ''private password: string = ''public mqttAsyncClient: MqttClient = MqttAsync.createMqtt({url: this.serverUrl,clientId: this.clientId,persistenceType: 1,})private topic: string = "light002"connectMqtt() {this.mqttAsyncClient.connect({userName: this.userName,password: this.password,}).then(() => {this.mqttAsyncClient.isConnected().then((data: boolean) => {console.log("连接状态: " + data)});}).catch(() => {console.warn('连接失败')})}subscribeMqtt() {let subscribeOption: MqttSubscribeOptions = {topic: this.topic,//主题名称qos: 0 //消息的服务质量设置}this.mqttAsyncClient.subscribe(subscribeOption).then((data: MqttResponse) => {console.log("订阅成功 " + JSON.stringify(data));}).catch((err: MqttResponse) => {console.log("订阅失败" + JSON.stringify(err));})}messageArrived() {this.mqttAsyncClient.messageArrived((err, data) => {if (err) {console.error("接收消息时发生错误:", err);} else {console.log("接收到的消息:",JSON.stringify(data));}});}publish(message:string) {let publishOption: MqttPublishOptions = {topic: this.topic, //主题名称qos: 0, //消息的服务质量设置payload: JSON.stringify(message),//发布的消息};this.mqttAsyncClient.publish(publishOption).then((data: MqttResponse) => {console.log("推送成功" + JSON.stringify(data));}).catch((err: Error) => {console.log("推送失败" + JSON.stringify(err));});}disconnect() {this.mqttAsyncClient.disconnect().then((data: MqttResponse) => {console.log("断开成功:" + JSON.stringify(data));}).catch((err: MqttResponse) => {console.log("断开失败:" + JSON.stringify(err));})}
}
export const mqtt = new MQTT();
程序中的设置是按照巴法云设置的, 巴法云不支持QoS2,所以将QoS改为0。
主程序的代码如下:
import promptAction from '@ohos.promptAction';
import { mqtt } from './MQTT';@Entry
@Component
struct Index {@State message: string = 'Hello World'/*** In low-code mode, do not add anything to the build function, as it will be* overwritten by the content generated by the .visual file in the build phase.*/build() {}buttonClick(){mqtt.connectMqtt()}buttonPublish(){mqtt.publish("Hello!")}
}
完整的程序可以从CSDN下载:在x86模拟器和鸿蒙API9如何使用MQTT模块ohos-mqtt的示例程序资源-CSDN文库https://download.csdn.net/download/bit_mike/90091745。
运行测试
接下来启动x86模拟器,然后在其上运行本工程即可。
先点击Connect按钮连接服务器,然后再点击Publish按钮就可以向服务器发布消息。
我们可以用Wireshark观测到整个通信过程:
结语
至此我们完成了最终的目标,这里面最核心的就是使用NDK编译了NAPI所使用库文件。整个过程虽然有点多,但是总体上看仍然是比较容易理解的。
参考文献
- HarmonyOS实现MQTT_鸿蒙mqtt库-CSDN博客
- docs/adapter_windows.md · OpenHarmony-SIG/tpc_c_cplusplus - Gitee.com
相关文章:
如何在x86模拟器和鸿蒙API9如何使用MQTT模块ohos_mqtt
目录 引言 安装失败的原因 如何编译so文件的x86_64版本 下载源代码 安装NDK 代码编译 安装MQTT软件包 避免MQTT软件包自动升级 设置libs 客户端程序的编写 运行测试 结语 参考文献 引言 在上周的博客(如何在鸿蒙API9和x86模拟器中使用MQTT-CSDN博客&am…...
VB.NET 从入门到精通:开启编程进阶之路
摘要: 本文全面深入地阐述了 VB.NET 的学习路径,从基础的环境搭建与语法入门开始,逐步深入到面向对象编程、图形用户界面设计、数据访问、异常处理、多线程编程以及与其他技术的集成等核心领域,通过详细的代码示例与理论讲解&…...
芝法酱学习笔记(1.3)——SpringBoot+mybatis plus+atomikos实现多数据源事务
一、前言 1.1 业务需求 之前我们在讲解注册和登录的时候,有一个重要的技术点忽略了过去。那就是多数据源的事务问题。 按照我们的业务需求,monitor服务可能涉及同时对监控中心数据库和企业中心数据库进行操作,而我们希望这样的操作在一个事…...
图像处理插件:让小程序焕发视觉新生的秘密武器
在小程序开发中,图像处理是一个重要的环节,它涉及到图片的加载、显示、裁剪、压缩等多个方面。为了简化这一复杂过程,开发者通常会使用图像处理插件。这些插件不仅提供了丰富的图像处理功能,还封装了底层的图像操作逻辑࿰…...
力扣刷题TOP101: 27.BM34 判断是不是二叉搜索树
目录: 目的 思路 复杂度 记忆秘诀 python代码 目的: 给定一个二叉树根节点,请判断这棵树是不是二叉搜索树。 二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。 思路 什么是二叉搜索树&am…...
Linux图形化工具推荐
1、MobaXterm MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - DownloadFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Downloadhttps://mobaxterm.mobatek.net/download.html 2、FinalShell FinalShell SSH工具,服…...
蓝队基础:企业网络安全架构与防御策略
声明 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,此文章为对视频内容稍加整理发布,文章所提到的网站以及内容,只做学习交流,其他…...
数据结构:栈
什么是栈: 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。 栈…...
tcp_recvmsg 函数
tcp_recvmsg 函数是 Linux 内核 TCP 栈的一部分,它主要用于处理从 TCP socket 接收数据的过程。这个函数的主要任务是从 TCP 接收队列中提取数据,并将这些数据拷贝到用户空间提供的缓冲区中。 以下是 tcp_recvmsg 函数的一般工作流程和功能解释: 函数签名和参数 int tcp_re…...
《数据结构》(应用题)
历年真题(09~24) 2009 最短路径(Dijkstra青春版) 【2009统考真题】带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点…...
阿里内部正式开源“Spring Cloud Alibaba (全彩小册)”
年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,面试的同学们不得不面临着 1 个…...
LeetCode题练习与总结:根据字符出现频率排序--451
一、题目描述 给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。 返回 已排序的字符串 。如果有多个答案,返回其中任何一个。 示例 1: 输入: s "tree" 输出: "eert" …...
Excel VBA学习系列汇总20241205
整理几年工作中,实用VBA代码,绝对干货! 方便自己查询,方便大家学习, 有缘人可复制使用,记得分享给大家免费学习哦! 序历史文章1新学期开始,如何新学期开始,如何按成绩名次…...
给el-table表头添加icon图标,以及鼠标移入icon时显示el-tooltip提示内容
在你的代码中,你已经正确地使用了 el-tooltip 组件来实现鼠标划过加号时显示提示信息。el-tooltip 组件的 content 属性设置了提示信息的内容,placement 属性设置了提示信息的位置。 你需要确保 el-tooltip 组件的 content 属性和 placement 属性设置正…...
基于LLM智能问答系统【阿里云:天池比赛】
流程: 1、分别识别问题及提供的资料文件中的公司名实体,有公司名的走语义检索,无公司名的走结构化召回 2、结构化召回:Qwen根据问题生成sql,执行sql获取结果数值,把结果数值与问题给到Qwen生成最终结果 …...
k8s-Informer概要解析(2)
Client-go 主要用在 k8s 控制器中 什么是 k8s Informer Informer 负责与 kubernetes APIServer 进行 Watch 操作,Watch 的资源,可以是 kubernetes 内置资源对象,也可以 CRD。 Informer 是一个带有本地缓存以及索引机制的核心工具包&#x…...
Leetcode 3376. Minimum Time to Break Locks I
Leetcode 3376. Minimum Time to Break Locks I 1. 解题思路2. 代码实现 题目链接:3376. Minimum Time to Break Locks I 1. 解题思路 这一题我最开始的思路走的是贪婪算法的路子,优先走X的增长,不过很不幸失败了,后面还是暴力…...
介绍8款开源网络安全产品
01 HFish蜜罐 HFish是一款开源的蜜罐系统,用于模拟各种网络服务和应用,以吸引潜在的黑客攻击。它能够记录攻击尝试并收集攻击者的信息,从而帮助网络管理员识别潜在的威胁。HFish支持多种协议和服务,包括HTTP、FTP、SSH等&#…...
vue2面试题|[2024-12-5]
开题答辩终于结束了,又要开始我的前端面试学习啦!!! 1.v-model双向绑定原理 class Vue{constructor(options){this.$options optionsthis.$watchEvent {}if(typeof options.beforeCreate function){options.beforeCreate.bind…...
共筑数字安全防线,2024开源和软件安全沙龙即将启幕
随着数字化转型进程的加快以及开源代码的广泛应用,开源凭借平等、开放、协作、共享的优秀创作模式,逐渐成为推动数字技术创新、加速传统行业转型升级的重要模式。但随着软件供应链日趋复杂多元,使得其安全风险不断加剧,针对软件供…...
目标跟踪领域经典论文解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
SQL DQL数据查询语言(后续)
SQL DQL数据查询语言(后续) 1.子查询 在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句在返回列中嵌套一个查询 where条件中嵌套 要求:查询课程为《高等数学-2》且分数不小于80分的学生的学号和姓名select a.StudentNo,a…...
Gitee配置SSH公钥
采用SSH协议同步Git仓库代码的好处就是高效。在配置好SSH公钥后,不需要每次操作都要输入用户名和密码(主要针对命令行来说)。 以我个人项目为例。 生成 SSH 公钥 1. 通过命令 ssh-keygen 生成 SSH Key: ssh-keygen -t ed25519…...
机器学习——感知机模型
文章目录 前言1.感知机模型介绍1.1基本概念1.2数学表达1.3几何解释1.4优缺点 2.二分类应用2.1应用介绍2.2准备数据集2.2.1环境检查2.2.2数据集介绍2.2.3获取数据2.2.4划分数据集 2.3可视化训练集2.4训练过程2.4.1首轮梯度下降2.4.2多轮梯度下降 2.5可视化分类结果2.6在验证集验…...
如何选择安全、可验证的技术?
澳大利亚信号局的澳大利亚网络安全中心 (ASD 的 ACSC) 发布了一份指导文件,题为《选择安全和可验证的技术》,旨在帮助组织在采购软件(专有或开源)、硬件(例如物联网设备)和云服务(SaaS、MSP 服务…...
STL库中list的使用与迭代器的实现
STL库中list的使用与迭代器的实现 1.使用list中的部分函数assignspliceremoveuniquemeger 2.list的部分功能实现(重点)框架迭代器的实现 1.使用list中的部分函数 assign 功能一:当前链表的节点全部销毁,替换成迭代区间的值 功能二…...
android 常用三方框架
说实话, 我是比较讨厌三方框架的, 比如一个eventbus 底层逻辑就是个观察者模式,当然他的场景涵盖的比较丰富, 单从 单一原则来说, 还是一个简单的观察者模式就能解决问题, 何必要添加那么多文件到我们的项目…...
Browser.js断点续传上传
通过断点续传上传的方式将文件上传到OSS前,您可以指定断点记录点。上传过程中,如果出现网络异常或程序崩溃导致文件上传失败时,将从断点记录处继续上传未上传完成的部分。 attention: 1、 当您使用webpack或browserify等打包工具…...
Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速,租房市场日益繁荣&a…...
了解Cocoa Touch框架与主要组件
Cocoa Touch框架详解及其主要组件 一、Cocoa Touch框架概述 Cocoa Touch框架是苹果公司为iOS应用程序开发提供的一套完整的框架,它基于Cocoa框架,并专为触控设备如iPhone、iPad等设计。这套框架不仅包含了构建图形用户界面(GUI)…...
ISO45001职业健康安全管理体系涵盖了丰富的内容
范围与术语 适用范围:明确规定了该标准适用于任何有愿望建立、实施和保持职业健康安全管理体系的组织,旨在使组织能够通过管理体系的有效运行,预防和控制职业健康安全风险,持续改进职业健康安全绩效。术语定义:对职业…...
Spring Boot 整合 Druid 并开启监控
文章目录 1. 引言2. 添加依赖3. 配置数据源4. 开启监控功能5. 自定义 Druid 配置(可选)6. 访问监控页面7. 注意事项8. 总结 Druid 是一个由阿里巴巴开源的高性能数据库连接池,它不仅提供了高效的连接管理功能,还自带了强大的监控和…...
【JAVA高级篇教学】第一篇:Springboot对接通义千问大模型
博主今天打算讲解下Java如何对接阿里云的通义千问大模型,可以自己玩玩ai问答之类的! 目录 一、发展历程 二、API-KEY的获取与配置 三、引用SDK 四、文本模型 1.代码 2.返回数据 3.官方代码案例 五、通义千问VL 1.计量计费 六、查看API-KEY调用额…...
【Windows 同时安装 MySQL5 和 MySQL8 - 详细图文教程】
卸载 MySQL 参考文章: 完美解决Mysql彻底删除并重装_怎么找到mysql并卸载-CSDN博客使用命令卸载mysql_卸载mysql服务命令-CSDN博客 先管理员方式打开 cmd ,切换到 MySQL 安装目录的 bin 文件夹下,执行如下命令,删除 MySQL 服务 my…...
Next.js 系统性教学:深入理解缓存与数据优化策略
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 前言 1. 缓存的基本概念 1.1 缓存的作用 1.2 Next.js 中的缓存策略 2. Next.js 的缓存机制 2.1 请求记忆化(Request Memoization) 2.1.1 什…...
JAVA数据结构
1.数组 (Array): 固定大小的容器,用于存储相同类型的元素,数组在内存中是连续存储的,支持通过索引快 速访问元素。 int[] numbers = new int[10]; numbers[0] = 1;2.Java Collections Framework (JCF) JCF提供了一组接口和类用于管理和操作集合(如列表,集合,…...
力扣第96题 不同的二叉搜索树
力扣第96题 - 不同的二叉搜索树 题目描述 给定一个整数 n,求以 1 到 n 为节点组成的所有 不同的二叉搜索树(BST) 的个数。 题目分析 二叉搜索树的性质 对于一个二叉搜索树,以 i 为根节点: 左子树的节点值来自 [1, i…...
在Ubuntu上使用IntelliJ IDEA:开启你的Java开发之旅!
你好,年轻的学徒!🧑💻 是时候踏上进入Java开发世界的史诗之旅了,我们的得力助手将是强大的IntelliJ IDEA。准备好了吗?出发吧! 在我们开始之前,我们需要下载这个工具。但是&#…...
【C语言】18. 自定义类型:结构体类型
文章目录 前言:一、结构体类型的声明1、结构体回顾1)结构的声明2)结构体变量的创建和初始化 2、结构的特殊声明3、结构的⾃引⽤ 二、结构体变量的创建和初始化1、对⻬规则2、为什么存在内存对⻬?3、修改默认对⻬数 三、结构成员访问操作符1、…...
智能租赁管理系统助力规范化住房租赁市场提升用户体验
内容概要 在当今的住房租赁市场中,智能租赁管理系统应运而生,为房东和租客带来了前所未有的便利。这套系统就像一位全能助手,将租赁信息、监管机制以及在线签约功能集成在一起,让整个过程变得流畅而高效。换句话说,您…...
ERROR: KeeperErrorCode = NoNode for /hbase/master
原因分析 通过上面的情景模拟,我们可以看到报错的原因在于zookeeper中出现问题,可能是zookeeper中的/hbase/master被删除,或者是在hbase集群启动之后重新安装了zookeeper,导致zookeeper中的/hbase/master节点数据异常。 1. 停止…...
springboot第84集:Java进阶之路, Netty
# kafka-map文件夹 cd /usr/local/kafka-map # 根据需求自行修改配置 vi application.yml # 启动 java -jar kafka-map.jar byte minByte -128; byte maxByte 127; 用于表示一个 8 位(1 字节)有符号整数。它的值范围是 -128(-2^7࿰…...
DevOps持续集成
DevOps流程 第一步安装git 关闭防火墙 systemctl stop firewalld cd /usr/loacl vim docker-compose.yml docker search gitlab 拉取gitlab镜像 2.33GB docker pull gitlab/gitlab-ce:latestvim docker-compose.yml修改docker-compose.yml version: 3.1 services:gitlab:i…...
sql server log文件
确定 SQL Server 实例中具有大量 VDF 的数据库 SELECT [name], COUNT(l.database_id) AS vlf_count FROM sys.databases AS s CROSS APPLY sys.dm_db_log_info(s.database_id) AS l GROUP BY [name] HAVING COUNT(l.database_id) > 100; 在收缩日志文件之前确定事务日志中…...
pip install报错 Missing dependencies for SOCKS support的正确解决办法:离线安装pysocks
今天准备开发python项目的时候,发现在pip install 的时候报错了,提示:Missing dependencies for SOCKS support,查遍csdn所有的回答都统一是只需要执行: unset all_proxy unset ALL_PROXY 然后再执行 pip install p…...
嵌入式学习(15)-stm32通用GPIO模拟串口发送数据
一、概述 在项目开发中可能会遇到串口不够用的情况这时候可以用通过GPIO来模拟串口的通信方式。 二、协议格式 按照1位起始位8位数据位1位停止位的方式去编写发送端的程序。起始位拉低一个波特率的时间;发送8位数据;拉高一个波特率的时间。 三、代码 …...
AKE 安全模型:CK, CK+, eCK
参考文献: [BCK98] Mihir Bellare, Ran Canetti, Hugo Krawczyk. A Modular Approach to the Design and Analysis of Authentication and Key Exchange Protocols (Extended Abstract). STOC 1998: 419-428.[CK01] Ran Canetti, Hugo Krawczyk. Analysis of Key-E…...
【Linux】通过crond服务设置定时执行shell脚本,实际执行时间却延迟了8小时
一、问题描述 通过使用crond服务设置定时任务,在每天凌晨的2:00执行脚本,但检查结果时发现,实际执行时间却在上午10点。 检查shell脚本执行结果发现,实际执行脚本时间在上午10:00,延迟了8小时。 检查系统时间…...
什么是云原生数据库 PolarDB?
云原生数据库 PolarDB 是阿里云推出的一款高性能、兼容性强、弹性灵活的关系型数据库产品。它基于云原生架构设计,结合分布式存储和计算分离的技术优势,为用户提供强大的计算能力、卓越的可靠性以及高性价比的数据库解决方案。PolarDB 适合各种业务场景&…...
(6)JS-Clipper2之ClipperOffset
1. 描述 ClipperOffset类封装了对打开路径和关闭路径进行偏移(膨胀/收缩)的过程。 这个类取代了现在已弃用的OffsetPaths函数,该函数不太灵活。可以使用不同的偏移量(增量)多次调用Execute方法,而不必重新分配路径。现在可以在一次操作中对开放和封闭路…...