1.Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、源码编译和使用
2.如何看待最新爆出的解读'红雨蘑菇'iis服务器远程代码执行漏洞?
3.RocketMQ消息中间件从入门到高级实战教程,让你轻松掌握速来学习!源码
4.消息驱动交易系统单中心假死--ActiveMQ不生产也不消费
Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、解读编译和使用
前话
项目需求驱使我们转向 MQTT 协议的源码实现,由于 QtMqtt 库不支持队列模式(点对点),解读2021米酷网源码而只能使用订阅/发布者模式,源码我们决定采用 C++ ActiveMQ 进行开发。解读
MQTT 协议
MQTT,源码即消息队列遥测传输协议,解读是源码一种基于发布/订阅模式的轻量级通讯协议,IBM 在 年发布。解读其优点在于,源码以极低的解读代码量和带宽消耗提供即时可靠的消息服务,广泛应用于物联网、源码小型设备和移动应用。
设计原则与特点
MQTT 的核心特点是发布/订阅消息模式,实现一对多的消息发布,减少应用程序间的耦合。它对负载内容进行屏蔽的高效传输,基于 TCP/IP 提供网络连接,支持三种消息发布服务质量。它的小型传输、低开销和客户端异常中断机制,使其非常适合物联网领域,云矿app源码尤其适用于传感器与服务器间的通信,以及信息收集。
发布/订阅者模式
MQTT 是基于客户端-服务器的消息发布/订阅传输协议,适用于受限环境,如机器与机器通信、物联网应用,特别适合传感器和服务器通信,以及小型设备的运算能力和带宽相对不足的情况。
MQTT 服务器
MQTT 协议中的服务器角色称为“消息代理”,可以是应用程序或设备,位于消息发布者和订阅者之间,负责数据推送。
MQTT 协议中的方法
MQTT 定义了一系列方法(动作),用于操作服务器上的资源,包括数据处理和生成。主要方法包括读取、写入、订阅和发布等。
CMS 客户端
CMS API 是一种类似 JMS 的 C++ API,用于与消息代理进行交互,如 Apache ActiveMQ,它使客户端代码更加整洁、易于维护。
下载与编译 ActiveMQ-CPP
下载 ActiveMQ-CPP 的教育app源码开发最新 Windows 版本源码,推荐访问官网或 CSDN 下载页面。使用 VS 编译 ActiveMQ-CPP。
编译步骤
1. 解压下载的压缩文件至专用文件夹。
2. 使用 VS 打开编译工程文件。
3. 编译“avtivemq-cpp”时遇到“/ZI”和“/Gy-”命令行选项不兼容的错误。
4. 通过手动更改“/Zi”和“/Gy”命令为兼容版本来解决。
5. 继续编译工程生成 debug 和 release 版本。
6. 编译通过,切换到 release 版本后,需要重新配置包含头文件属性并编译。
编译 APR-1.7.0 库
ActiveMQ 依赖 APR 库,其相关信息在源码根目录的 README.txt 中提供。首先下载 APR 库,解压至专用编译文件夹,使用 CMake 配置工程,生成 VS 工程文件。然后,使用 CMake 生成 APR 库,通过 VS 打开并编译工程,最终完成头文件和库文件的归类整理。
如何看待最新爆出的'红雨蘑菇'iis服务器远程代码执行漏洞?
Apache ActiveMQ官方发布新版本,修复了一个远程代码执行漏洞(CNVD-- CVE--)。该漏洞允许攻击者通过Apache ActiveMQ的端口发送恶意数据,从而导致远程代码执行,chrome开放源码完全控制服务器。影响的版本包括环境搭建的多个阶段。考虑到没有找到合适的Docker镜像,我们尝试自己编写并分析Dockerfile,结合官方文档,使用docker-compose.yml进行环境配置。
在漏洞分析阶段,我们下载源代码,并在apache-activemq-5..2\bin\activemq文件中开启调试模式。通过github.com/apache/activm找到新版本修复的漏洞位置,即org.apache.activemq.openwire.v.BaseDataStreamMarshaller#createThrowable方法。该方法允许控制ClassName和message,进而调用任意类的String构造方法。结合ActiveMQ内置的Spring框架,利用org.springframework.context.support.ClassPathXmlApplicationContext加载远程配置文件实现SPEL表达式注入。
为了深入学习,我们整理了一份全套资料,包括网安学习成长路径思维导图、+网安经典常用工具包、+SRC分析报告、+网安攻防实战技术电子书、权威CISSP认证考试指南、最新网安大厂面试题合集、APP客户端安全检测指南(安卓+IOS)等资源,神龙状态指标源码帮助网安学习者全面成长。
在寻找漏洞触发点的过程中,我们关注到org.apache.activemq.ActiveMQSession#asyncSendPacket和org.apache.activemq.ActiveMQSession#syncSendPacket函数可以发送command,最后调用org.apache.activemq.transport.tcp.TcpTransport#oneway或((ActiveMQConnection)connection).getTransportChannel().oneway/expetionResponse;进行触发。由于ExceptionResponse实例化需要Throwable类型,我们修改ClassPathXmlApplicationContext继承Throwable类型以实现触发。
通过数据流触发ExceptionResponseMarshaller,主要是依据ActiveMQ协议,利用伪造类实现触发ExceptionResponse。利用org.apache.activemq.transport.tcp.TcpTransport#readCommand与wireFormat.unmarshal数据处理逻辑,我们找到对应的wireFormat.marshal,最终通过本地重写TcpTransport类优先触发本地实现,将发送请求修改为触发ExceptionResponseMarshaller。同样,修改ClassPathXmlApplicationContext继承Throwable类型以满足ExceptionResponse实例化需求。
总结以上步骤,我们完成了对Apache ActiveMQ远程代码执行漏洞的复现与分析,强调了安全实践的重要性并提供了一系列资源支持,以帮助网络安全专业人士深入学习与应对类似威胁。
RocketMQ消息中间件从入门到高级实战教程,让你轻松掌握速来学习!
《消息队列三部曲》的最后篇章,今日重磅推出《消息队列三部曲之RocketMQ》。在深入探讨消息队列的作用前,让我们通过一个实际案例来理解消息队列的重要性。假设我们需要实现用户注册功能,包括信息存入数据库、发送激活邮件与注册短信。采用同步方案,每步ms,总耗时ms。优化后,数据库与邮件、短信并发执行,耗时降至ms。
进一步优化,引入消息队列,数据库操作后向队列发送通知,各模块异步处理邮件与短信,实现整体任务ms完成。消息队列不仅提升了项目性能,还实现了业务模块间的解耦。至此,消息队列的作用已清晰可见。
学习ActiveMQ、RabbitMQ后,RocketMQ的探索将较为轻松。RocketMQ在阿里巴巴高并发场景中经受多年实战考验,其性能与稳定性在众多消息队列中脱颖而出。本套视频教程内容丰富,从源码深入解读,为你揭示消息队列的精髓。
RocketMQ的独特优势,结合《消息队列三部曲》的系统教学,构成了不可多得的消息队列经典教程。视频课程内容精心设计,情节紧凑,带你领略消息队列的奥秘。
欲知更多详情,请访问课程链接。此教程将带你深入了解RocketMQ,助你提升项目性能,实现业务模块解耦。别犹豫,立即开始学习吧!分享你的学习心得,关注、点赞、收藏,共同探索消息队列的无限可能。
消息驱动交易系统单中心假死--ActiveMQ不生产也不消费
面对交易系统单中心假死的挑战,运维同事迅速应对,将生产流量引导至备用中心,确保了系统在短暂停顿后的稳定运行。然而,这一事件揭示了ActiveMQ作为消息中间件的核心地位,以及在特定架构下可能出现的隐患。为了解决这一问题,我们分析了问题现象、故障证据,并逐步深入故障定位,最终找到并解决根本原因。
一、问题现象
系统单中心假死,ActiveMQ消息队列中积压了大量未被消费的消息,消费者无法继续消费,生产者也无法继续生产,导致大量新订单积压,影响了系统的处理效率。这一现象的出现,暴露了ActiveMQ在特定架构下的瓶颈,以及系统设计中的潜在风险。
二、故障证据
通过日志分析,我们发现ActiveMQ的流量控制机制触发了内存限制,导致生产者被阻塞。这表明,尽管系统配置了较大内存值,但在特定条件下,消息队列的积压仍可能引发性能问题。
三、故障定位
在排查过程中,我们发现ActiveMQ的内存设置存在问题,导致流量控制机制过早激活。深入分析代码后,我们发现ActiveMQ通过限制生产者在内存满载时的生产速率来避免队列积压,以及在消费者无法进行有效消费时,主动暂停生产者的生产行为,以达到平衡队列中消息的流动。然而,这一机制在我们的特定场景下未能有效发挥作用,原因在于消费者未能及时确认消费的消息,导致生产者被无限制地阻塞。
四、问题深挖
通过深入源码分析,我们发现ActiveMQ客户端在接收到服务端的流量控制信号后,会阻塞在等待锁的获取过程中,从而导致消费者无法确认消息已被消费,进而影响生产者的正常运行。这一问题的根源在于ActiveMQ客户端与服务端之间的通信机制,以及在特定情况下锁管理的不足。
五、问题解决
为了解决上述问题,我们采取了以下措施:
1. 调整ActiveMQ的内存设置与流量控制参数,以适应系统负载变化。
2. 对数据库执行计划进行优化,确保在不同负载下都能选取最优执行路径。
3. 为生产者与消费者使用不同的连接,避免共享连接时的性能瓶颈与同步问题。
通过这些措施,我们不仅解决了单中心假死的问题,还提升了系统的整体性能与稳定性,确保了交易系统的高效运行。这一事件也提醒我们,在设计和优化系统时,需要充分考虑消息中间件的特性与限制,以及系统架构的潜在风险,以确保系统的稳定与高效。