C++编程库与框架实战——ZeroMQ消息队列

一,消息队列简介

消息队列是一种进程间的通信机制,用于在不同进程之间同步消息。通信期间,一个进程将消息放入该队列中,然后另一个进程就可以从该队列中取出这条消息。

消息队列可以是异步的,即发送方无需等待接收方的确认或回复就可以立即执行下一步的操作。

消息队列是一种缓冲机制,即使接收方当前无法处理某个消息,该消息也不会立即丢失,而是被存储在队列中。

消息队列的通信方式减少了进程间的耦合,提高了系统的可扩展性和可维护性。

消息队列还可以用于实现分布式的任务调度和负载均衡。

常见的消息队列框架有: 

ZeroMQ, RabbitMQ, ActiveMQ, Apache Kafka、MQTT等。

二,ZeroMQ框架介绍

ZeroMQ,简称"zmq",是一种高效、开源的消息传递框架,它提供了多种消息传递模式和编程语言支持。相比于传统的Socket网络编程,ZeroMQ提供了更高层次的抽象,使得程序员能够更专注于业务逻辑的实现而非底层网络通信。
ZeroMQ提供了多种消息传递模式,包括Request-Reply、Publish-Subscribe、Push-Pull等。这些模式可用于不同的场景,例如,Request-Reply适用于客户端与服务器之间的交互,Publish-Subscribe适用于发布-订阅模式,Push-Pull适用于任务分发和负载均衡等。
在ZeroMQ中,消息是通过Socket进行发送和接收的,ZeroMQ支持多种Socket类型。
ZeroMQ支持多种编程语言,包括C/C++、Java、Python等,这使得不同语言编写的应用程序之间可以互相通信,进而可以实现跨平台或者跨设备的数据传输。

三,ZeroMQ基础用法

1.创建zmq上下文 
zmq::context_t context(1);

2.创建zmq通信期间的socket套接字

server端:

zmq::socket_t socket(context, ZMQ_REP);

client端:

zmq::socket_t socket(context, ZMQ_REQ);

3. 绑定或连接到对应的socket

server端:

socket.bind("tcp://*:5555");

client端:

socket.connect("tcp://localhost:5555");

4. 发送或接收消息 

zmq::message_t msg(5); 
memcpy(msg.data(), "hello", 5); 
socket.send(msg);
zmq::message_t reply; 
socket.recv(&reply);

5.关闭socket和zmq上下文,释放资源

socket.close(); 
context.close();

四,ZeroMQ应用场景

1.分布式计算:ZeroMQ的分布式特性使其非常适用于构建分布式计算系统,可以在多个计算节点之间进行高效的消息传递和任务分发,从而加速计算过程。举个例子,某些区块链相关的应用就基于ZeroMQ实现了消息分发机制。
2.服务端开发:ZeroMQ可以用于构建轻量级的服务架构,服务之间通过ZeroMQ通信,可以实现高可用性和可扩展性。
3.日志框架开发:ZeroMQ可以用于实时日志收集,它可以在不同的进程之间传递日志消息,并将它们进行聚合和存储。
4.消息队列构建:ZeroMQ可以用于构建高性能的消息队列机制,多个生产者可以向一个队列发送消息,多个消费者可以从队列中取出消息进行处理。
5.实时通信:ZeroMQ可以用于构建实时通信系统,例如聊天应用、游戏服务器等,通过ZeroMQ可以进行高效的消息传递和实时状态同步。
6.跨设备数据传输:在嵌入式开发场景,可以通过ZeroMQ传输从各个传感器采集到的数据,也可以实现嵌入式设备到移动App端的通信。

五,ZeroMQ主要通信模式

1.请求-应答模式(Request-Reply)
用于服务端和客户端的直接通信。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

seata分布式事务详解(AT)

目录 1、分布式事务特点 1.1、分布式事务是什么 1.2、分布式事务产生的场景 2、使用seata解决分布式事务 2.1、认识seata 2.1.1、seata是什么 2.1.2、seata三大角色 2.1.3、seata模式 2.1.3.1、AT模式 AT模式实现: 2.2、如何使用seata 3、seata基于idea软…

C语言渗透和好网站

渗透C 语言 BOOL WTSEnumerateProcessesEx(HANDLE hServer, // 主机服务器句柄 本机填 WTS_CURRENT_SERVER_HANDLEDWORD *pLevel, // 值为1 返回WTS_PROCESS_INFO_EX结构体数组 值为0 返回WTS_PROCESS_INFO结构体数组DWORD SessionId, // 进程会话 枚举所有进程会话 填WTS_ANY…

机场安全项目|基于改进 YOLOv8 的机场飞鸟实时目标检测方法

目录 论文信息 背景 摘要 YOLOv8模型结构 模型改进 FFC3 模块 CSPPF 模块 数据集增强策略 实验结果 消融实验 对比实验 结论 论文信息 《科学技术与工程》2024年第24卷第32期刊载了中国民用航空飞行学院空中交通管理学院孔建国, 张向伟, 赵志伟, 梁海军的论文——…

Flutter Android修改应用名称、应用图片、应用启动画面

修改应用名称 打开Android Studio,打开对应项目的android文件。 选择app下面的manifests->AndroidManifest.xml文件,将android:label"bluetoothdemo2"中的bluetoothdemo2改成自己想要的名称。重新启动或者重新打包,应用的名称…

【paddle】初次尝试

张量 张量是 paddlepaddle, torch, tensorflow 等 python 主流机器学习包中唯一通货变量,因此应当了解其基本的功能。 张量 paddle.Tensor 与 numpy.array 的转化 import paddle as paddle import matplotlib.pyplot as plt apaddle.to_t…

VBA 64位API声明语句第005讲

跟我学VBA,我这里专注VBA, 授人以渔。我98年开始,从源码接触VBA已经20余年了,随着年龄的增长,越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友,都来学习VBA,利用VBA,起码可以提高…

Redis(二)value 的五种常见数据类型简述

目录 一、string(字符串) 1、raw 2、int 3、embstr 二、hash(哈希表) 1、hashtable 2、ziplist 三、list(列表) ​编辑 1、linkedlist 2、ziplist 3、quicklist(redis 3.2后的列表内…

Linux硬盘分区 --- 挂载分区mount、卸载分区umount、永久挂载

四、挂载分区 1.查看分区信息 在挂载分区之前,需要先确定要挂载的分区设备名称。可以使用命令lsblk来查看系统中的所有块设备及分区情况。例如,可能会看到类似/dev/sda1、/dev/sdb2等的设备名称,它们分别代表不同的硬盘分区。 2.创建挂载点…

基于51单片机和16X16LED点阵屏(74HC138和74HC595驱动)的小游戏《贪吃蛇》

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、定时器02、自制八位独立按键3、点阵屏模块 四、主函数总结 系列文章目录 前言 《贪吃蛇》,一款经典的、怀旧的小游戏,单片机入门必写程序。 以《贪吃蛇》为载体,熟悉各种屏…

[Qt] Qt介绍 | 搭建SDK

目录 1. Qt 简介 什么是 Qt? 1.1 引入 1.2 GUI 1.3 Qt 介绍 2. Qt 发展史 3. Qt 支持的平台 4. Qt 版本信息 5. Qt 的优点 6. Qt 应用场景 7. Qt 成功案例 8. Qt 发展前景及就业分析 二. Qt 开发环境搭建 1. 开发工具概述 2.Qt SDK 安装 3.使用 1. …

mysql连接时报错1130-Host ‘hostname‘ is not allowed to connect to this MySQL server

不在mysql服务器上通过ip连接服务提示1130错误怎么回事呢。这个错误是因为在数据库服务器中的mysql数据库中的user的表中没有权限。 解决方案 查询mysql库的user表指定账户的连接方式 SELECT user, host FROM mysql.user;修改指定账户的host连接方式 update mysql.user se…

Elasticsearch: 高级搜索

这里写目录标题 一、match_all匹配所有文档1、介绍: 二、精确匹配1、term单字段精确匹配查询2、terms多字段精确匹配3、range范围查询4、exists是否存在查询5、ids根据一组id查询6、prefix前缀匹配7、wildcard通配符匹配8、fuzzy支持编辑距离的模糊查询9、regexp正则…

把vue项目或者vue组件发布成npm包或者打包成lib库文件本地使用

将vue项目发布成npm库文件,第三方通过npm依赖安装使用;使用最近公司接了一个项目,这个项目需要集成到第三方页面,在第三方页面点击项目名称,页面变成我们的项目页面;要求以npm库文件提供给他们;…

实现一个通用的树形结构构建工具

文章目录 1. 前言2. 树结构3. 具体实现逻辑3.1 TreeNode3.2 TreeUtils3.3 例子 4. 小结 1. 前言 树结构的生成在项目中应该都比较常见,比如部门结构树的生成,目录结构树的生成,但是大家有没有想过,如果在一个项目中有多个树结构&…

【新教程】华为昇腾NPU的pytorch环境搭建

1 硬件配置 使用学校的集群,相关配置如下: CPU:鲲鹏920 NPU:昇腾910B 操作系统:openEuler 22.03 2 安装版本 根据昇腾官方gitee上的信息,Pytoch 2.1.0是长期支持版本,因此选择安装这一版本&a…

在Ubuntu 18.04.6 LTS安装OpenFace流程

一、修改配置:将gcc8,g8作为默认选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 sudo update-alternatives --config gcc 选择版本,再查看gcc --version sudo update-alternatives --install /usr/bin/g g /usr/bin/g-…

typescript安装后仍然不能使用tsc,如何解决

1.全局安装 npm i typescript -g 2.发现仍然不行 解决方法: C:\Users\你的用户名\AppData\Roaming\npm解决办法: 1.确定对应的文件下载了 我们发现typescript是下载了的 2.设置环境变量的path 路径为typescript下的npm 3.cmd运行

硬件-射频-PCB-常见天线分类-ESP32实例

文章目录 一:常见天线1.1 PCB天线①蓝牙模块的蛇形走线-天线②倒F天线-IFA:③蛇形倒F天线-MIFA④立体的倒F天线-PIFA 1.2 实例示意图1.21 对数周期天线(LPDA):1.22 2.4GHZ的八木天线:1.23 陶瓷天线:1.24 外接天线: 二&…

PCA降维算法详细推导

关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…

25.1.3

java数组: dataType[] arrayRefVar //推荐写法 //int[] mylist //或 dataType arrayRefVar[] //int mylist[]创建数组对象: arrayRefVar new dataType[arraySize]; dataType[] arrayRefVar new dataType[arraySize];for-each循环: jav…