1.Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、源码编译和使用
2.如何使用Jmeter实现MQ数据的编译发送和接收?性能测试实战篇
3.如何看待最新爆出的'红雨蘑菇'iis服务器远程代码执行漏洞?
4.消息驱动交易系统单中心假死--ActiveMQ不生产也不消费
5.盘点 35 个 Apache 顶级项目,我拜服了…
Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、源码编译和使用
前话
项目需求驱使我们转向 MQTT 协议的编译实现,由于 QtMqtt 库不支持队列模式(点对点),源码而只能使用订阅/发布者模式,编译erp app源码下载我们决定采用 C++ ActiveMQ 进行开发。源码
MQTT 协议
MQTT,编译即消息队列遥测传输协议,源码是编译一种基于发布/订阅模式的轻量级通讯协议,IBM 在 年发布。源码其优点在于,编译以极低的源码代码量和带宽消耗提供即时可靠的消息服务,广泛应用于物联网、编译小型设备和移动应用。源码
设计原则与特点
MQTT 的核心特点是发布/订阅消息模式,实现一对多的消息发布,减少应用程序间的耦合。它对负载内容进行屏蔽的高效传输,基于 TCP/IP 提供网络连接,支持三种消息发布服务质量。它的小型传输、低开销和客户端异常中断机制,使其非常适合物联网领域,尤其适用于传感器与服务器间的通信,以及信息收集。
发布/订阅者模式
MQTT 是基于客户端-服务器的消息发布/订阅传输协议,适用于受限环境,如机器与机器通信、物联网应用,特别适合传感器和服务器通信,以及小型设备的运算能力和带宽相对不足的情况。
MQTT 服务器
MQTT 协议中的服务器角色称为“消息代理”,可以是应用程序或设备,位于消息发布者和订阅者之间,负责数据推送。
MQTT 协议中的方法
MQTT 定义了一系列方法(动作),用于操作服务器上的资源,包括数据处理和生成。主要方法包括读取、写入、订阅和发布等。
CMS 客户端
CMS API 是一种类似 JMS 的 C++ API,用于与消息代理进行交互,如 Apache ActiveMQ,它使客户端代码更加整洁、易于维护。王者荣耀代练源码
下载与编译 ActiveMQ-CPP
下载 ActiveMQ-CPP 的最新 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 打开并编译工程,最终完成头文件和库文件的归类整理。
如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇
JMeter是一个广泛用于性能测试的开源工具,尤其擅长压力测试。它提供了丰富的扩展插件以满足不同场景下的性能测试需求。消息队列(Message Queue,简称MQ)作为现代分布式系统中的关键组件,被大量应用在软件或程序中。在进行测试时,遇到MQ系统改造的情况,需要使用JMeter来实现MQ数据的发送和接收,以完成性能测试工作。本文将基于实际项目经验,介绍如何利用JMeter的一个扩展插件Mqmeter进行MQ性能测试。 消息队列在分布式系统中扮演重要角色,主要解决应用耦合、异步消息和流量削峰等问题,确保高性能、高可用、可伸缩和最终一致性架构的实现。常见的MQ系统包括ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ和RocketMQ等。 JMeter作为Apache项目下的开源性能测试工具,支持多种服务类型的虚拟主机系统源码测试,并允许用户通过插件扩展来满足特定的定制化需求,网络上提供了多种开源插件供测试人员使用。 本文结合实际测试中遇到的MQ测试需求,介绍如何使用Mqmeter插件来实现对IMB MQ队列的数据发送和接收。通过Mqmeter,测试人员能够利用JMeter完成MQ的压力测试,实现MQ的多并发操作。 为了执行性能测试,首先需要准备JMeter运行环境和Mqmeter插件。JMeter运行依赖Java环境,Maven环境用于编译Java源代码形成可执行的JAR包。本文详细说明了环境部署步骤,包括JDK安装、环境变量配置以及Maven和Mqmeter插件的安装过程。 在环境准备完成后,进行性能测试的具体执行步骤如下:启动JMeter,添加线程组和取样器,选择Mqmeter作为Java请求取样器。
填写取样器参数,包括MQ管理器名称、队列名称、等待间隔、主机名、端口号、通道名称、用户ID和密码等。
配置参数化变量,实现向不同MQ队列发送不同消息内容的功能。
设置汇总报告、TPS监听器、响应时间监听器等,开始性能测试。
在测试过程中,利用Mqmeter插件进行MQ性能监控,实时查看MQ队列的深度,确保系统交易链路的可用性,并定性评估MQ本身的读写性能。通过脚本化指令,实现对MQ性能的实时监控,提高测试效率。 总结,Mqmeter插件提供了强大的功能,帮助测试人员高效地进行MQ性能测试。本文提供的步骤和方法,旨在为从事MQ性能测试的同行提供参考,同时指出了一些可能的疯狂android讲义2源码不足之处,如从消息队列取消息的具体方法和量化性能的详细方法,有待进一步探索和完善。如何看待最新爆出的'红雨蘑菇'iis服务器远程代码执行漏洞?
Apache ActiveMQ官方发布新版本,修复了一个远程代码执行漏洞(CNVD-- CVE--)。该漏洞允许攻击者通过Apache ActiveMQ的端口发送恶意数据,从而导致远程代码执行,完全控制服务器。影响的版本包括环境搭建的多个阶段。考虑到没有找到合适的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远程代码执行漏洞的复现与分析,强调了安全实践的重要性并提供了一系列资源支持,以帮助网络安全专业人士深入学习与应对类似威胁。
消息驱动交易系统单中心假死--ActiveMQ不生产也不消费
面对交易系统单中心假死的挑战,运维同事迅速应对,将生产流量引导至备用中心,确保了系统在短暂停顿后的稳定运行。然而,这一事件揭示了ActiveMQ作为消息中间件的核心地位,以及在特定架构下可能出现的隐患。为了解决这一问题,我们分析了问题现象、故障证据,并逐步深入故障定位,最终找到并解决根本原因。
一、问题现象
系统单中心假死,ActiveMQ消息队列中积压了大量未被消费的消息,消费者无法继续消费,生产者也无法继续生产,导致大量新订单积压,影响了系统的处理效率。这一现象的出现,暴露了ActiveMQ在特定架构下的瓶颈,以及系统设计中的潜在风险。
二、故障证据
通过日志分析,我们发现ActiveMQ的流量控制机制触发了内存限制,导致生产者被阻塞。这表明,尽管系统配置了较大内存值,但在特定条件下,消息队列的积压仍可能引发性能问题。
三、故障定位
在排查过程中,我们发现ActiveMQ的内存设置存在问题,导致流量控制机制过早激活。深入分析代码后,我们发现ActiveMQ通过限制生产者在内存满载时的生产速率来避免队列积压,以及在消费者无法进行有效消费时,主动暂停生产者的生产行为,以达到平衡队列中消息的流动。然而,这一机制在我们的特定场景下未能有效发挥作用,原因在于消费者未能及时确认消费的消息,导致生产者被无限制地阻塞。
四、问题深挖
通过深入源码分析,我们发现ActiveMQ客户端在接收到服务端的流量控制信号后,会阻塞在等待锁的获取过程中,从而导致消费者无法确认消息已被消费,进而影响生产者的正常运行。这一问题的根源在于ActiveMQ客户端与服务端之间的通信机制,以及在特定情况下锁管理的不足。
五、问题解决
为了解决上述问题,我们采取了以下措施:
1. 调整ActiveMQ的内存设置与流量控制参数,以适应系统负载变化。
2. 对数据库执行计划进行优化,确保在不同负载下都能选取最优执行路径。
3. 为生产者与消费者使用不同的连接,避免共享连接时的性能瓶颈与同步问题。
通过这些措施,我们不仅解决了单中心假死的问题,还提升了系统的整体性能与稳定性,确保了交易系统的高效运行。这一事件也提醒我们,在设计和优化系统时,需要充分考虑消息中间件的特性与限制,以及系统架构的潜在风险,以确保系统的稳定与高效。
盘点 个 Apache 顶级项目,我拜服了…
Apache软件基金会,全称为Apache Software Foundation(ASF),成立于年7月,是世界上最大的最受欢迎的开源软件基金会,是一个非营利性组织,专门支持开源项目。
目前,ASF旗下有超过+亿美元的价值,为开发者提供免费的开源软件和项目,惠及全球数十亿用户。
接下来,我们将盘点Apache软件基金会旗下的个顶级项目,这些项目在日常开发过程中常常遇到,有的可能已经使用过,而有的则值得学习了解,为未来项目提供参考。
1. Apache(httpd):Apache HTTP Server,中文名阿帕奇,是一个开源的HTTP服务器,支持在UNIX和Windows系统上运行。它自年4月起成为互联网上最受欢迎的web服务器,年2月庆祝了其岁生日。适用于HTML、等静态资源服务,类似于Nginx,但Nginx功能更为强大。
2. Tomcat:Apache开源的Java应用服务器,支持Java Servlet、JavaServer Pages、Java Expression Language和Java WebSocket技术。尽管近年来存在安全漏洞,但因其开源、免费的特性,仍被广泛应用于Java领域,成为主流应用服务器。
3. Commons:包含一系列Java公共组件的项目,提供Java核心API的额外组件,如StringUtils等。提供个实用的类库,极大地方便了Java开发。
4. POI:提供了一系列Java API对Microsoft Office格式文件进行读写处理,如Excel、Word、PowerPoint等文件的读写,功能强大。
5. HttpComponents:提供了HTTP及相关协议的Java组件和工具集,包括HttpCore、HttpClient、HttpAsyncClient,其中HttpClient是常用的HTTP客户端。
6. Logging services:包含Apache的日志服务,如Log4j,是使用最广泛的日志框架,还有Log4j 2、log4php、log4cxx等其他语言的日志框架。
7. Ant:一个较为老的Java项目编译和构建工具,虽然已经较少使用,但依然存在一定的价值。
8. Maven:是一个主流的软件项目管理工具,提供项目自动编译、单元测试、打包、发布等生命周期管理。
9. Subversion:一个开源的版本控制软件,用于代码版本控制、文件版本控制,几乎每个开发者都使用过。
. Struts:一个免费开源的MVC框架,用于创建Java web应用程序,曾风靡一时,但由于漏洞问题,已逐渐被Spring MVC、Spring Boot等替代。
. FreeMarker:是一个基于Java的模板引擎,允许使用简单而强大的模板语言引用Java代码中的对象来生成HTML页面、电子邮件、配置文件、源代码等。
. Velocity:一个基于Java语言的模板引擎,允许使用模板语言引用Java对象生成文本输出。尽管长期未更新,不再被Spring Boot 1.5.x版本支持,但仍推荐使用其他模板引擎。
. Tapestry:一个在Java Web开发界知名的面向组件的Web框架,用于创建高度可伸缩的Web应用程序。
. Shiro:一个功能强大且易于使用的Java安全框架,提供身份验证、授权、加密和会话管理等功能,有助于快速、轻松地开发和保护企业应用程序。
. Dubbo:阿里巴巴开源的分布式服务框架(RPC),曾停止维护后又重启维护并捐献给Apache软件基金会,现在在许多企业中仍大量运用。
. Thrift:一款优秀的、轻量级的RPC框架,最初由Facebook开发,后捐献给Apache软件基金会。支持多种语言,具备高度可扩展性。
. Zookeeper:一个分布式中间件神器,最初由Google Chubby的一个开源实现,主要用途包括配置中心、分布式锁等,支持高度可靠的分布式服务协调中间件。
. Curator:Zookeeper的Java客户端,提供一系列高级API和工具,简化了Zookeeper操作,易于使用。
. SkyWalking:一个可观测性分析平台和应用性能管理系统,提供分布式跟踪、指标监控、性能诊断、度量汇总和可视化的一体化解决方案。
. ShardingSphere:由一组分布式数据库中间件解决方案组成的开源生态系统,包括JDBC、Proxy、Sidecar(计划中),提供数据分片、分布式事务和数据库编排功能。
. Lucene:顶级的开源搜索框架,包括核心搜索库(Lucene core)和搜索服务器(Solr),提供强大的索引和搜索功能。
. ActiveMQ:一款灵活、强大的多协议开源消息中间件,支持JMS 1.1&2.0,目前最流行的Java消息中间件之一。
. RocketMQ:一款重量级、极具竞争力的消息队列产品,由阿里巴巴于年开源,年捐赠给Apache软件基金会,年正式毕业。
. Kafka:一款重量级开源项目,最初由LinkedIn公司开发,后捐献给Apache软件基金会。它是一种分布式、高吞吐量的发布订阅消息系统,能够实时处理大量数据。
. Hadoop:一种高可靠、可伸缩、分布式大数据处理框架,也是大数据行业公认的标准框架。
. HBase:建立在Hadoop HDFS上的非关系数据库,用于大数据存储,适用于随机、实时的读写访问。
. Pig:一个基于Hadoop的大数据分析平台,提供类似SQL的面向数据流的高级语言Pig Latin,用于执行Map Reduce任务。
. Hive:一个基于Hadoop的数据仓库工具,用于提取、转化和加载数据,可以将Hadoop原始结构化数据映射为Hive表,并提供类似SQL的HiveQL语言查询功能。
. Spark:一个用于大规模数据处理的统一分析引擎,支持无边界和有边界数据流上的有状态计算。
. Flink:一个分布式处理引擎框架,用于无边界和有边界数据流上的有状态计算,设计用于在所有常见的集群环境中运行。
. Storm:一个分布式实时计算系统,能够轻松可靠地处理数据流,类似于Hadoop的实时批处理。
. Cassandra:一款可伸缩、高可用、高性能去中心化的分布式数据库,最初由Facebook为了解决消息收件箱搜索问题而设计。
. CouchDB:一个面向文档的分布式数据库,以JSON作为存储格式和查询语言,提供直观可靠的RESTful API接口。
. Groovy:一个功能强大的基于JVM平台的动态编程语言,语法与Java相似,但更简洁、易于学习和高效。
. NetBeans:一款开源开发工具(IDE),集成开发环境和应用框架,支持Java、JavaScript、PHP等编程语言,最初由SUN公司开发,后被Oracle收购并捐赠给Apache软件基金会。
总结:这些顶级项目涵盖了基础组件、Web、分布式、搜索、消息中间件、大数据/数据库、编程语言、工具等多个领域,为Java生态系统的发展做出了巨大贡献。尽管有些项目面临淘汰,但它们都曾经辉煌过,正是这些开源项目推动了Java生态的繁荣。希望本文的分享对大家在日常开发中有所帮助。