1.概述
RocketMQ是alibaba公司开源的一个纯java的开源消息中间件。
2.开发测试环境搭建
1. 安装&启动
进入到RocketMQ下载包解压的路径下
D:\machine\RocketMQ-3.0.8\RocketMQ-3.0.8>
接下来安装
执行下边的命令或者执行install.bat(在这个bat文件中的命令如下)对maven熟悉的一眼就知道是执行clean package install assembly等操作。
mvn -Dmaven.test.skip=true clean packageinstall assembly:assembly –U
操作信息如下:
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] rocketmq-all 3.0.8 [INFO] rocketmq-remoting 3.0.8 [INFO] rocketmq-common 3.0.8 [INFO] rocketmq-client 3.0.8 [INFO] rocketmq-store 3.0.8 [INFO] rocketmq-broker 3.0.8 [INFO] rocketmq-tools 3.0.8 [INFO] rocketmq-research 3.0.8 [INFO] rocketmq-namesrv 3.0.8 [INFO] rocketmq-example 3.0.8 [INFO] rocketmq-qatest 3.0.8 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building rocketmq-all 3.0.8 3.0.8 [INFO]------------------------------------------------------------------------ [INFO]///省了…..编译打包过程 [INFO]------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] rocketmq-all 3.0.8................................ SUCCESS [5.861s] [INFO] rocketmq-remoting 3.0.8 ...........................SUCCESS [1.483s] [INFO] rocketmq-common 3.0.8............................. SUCCESS [1.627s] [INFO] rocketmq-client 3.0.8............................. SUCCESS [1.486s] [INFO] rocketmq-store 3.0.8.............................. SUCCESS [1.398s] [INFO] rocketmq-broker 3.0.8............................. SUCCESS [1.512s] [INFO] rocketmq-tools 3.0.8.............................. SUCCESS [1.125s] [INFO] rocketmq-research 3.0.8........................... SUCCESS [0.917s] [INFO] rocketmq-namesrv 3.0.8............................ SUCCESS [0.609s] [INFO] rocketmq-example 3.0.8............................ SUCCESS [0.604s] [INFO] rocketmq-qatest 3.0.8............................. SUCCESS [0.057s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO]------------------------------------------------------------------------ [INFO] Total time: 18.145s [INFO] Finished at: Fri Mar 28 10:36:08 CST2014 [INFO] Final Memory: 60M/395M [INFO]------------------------------------------------------------------------ D:\machine\RocketMQ-3.0.8\RocketMQ-3.0.8>接下来把编译好的项目copy出来
D:\machine\RocketMQ-3.0.8\RocketMQ-3.0.8\target> xcopy /E alibaba-rocketmq-3.0.8 D:\machine\RocketMQ-3.0.8\ D:\machine\RocketMQ-3.0.8>dir 驱动器 D 中的卷是 软件 卷的序列号是000F-1D4F D:\machine\RocketMQ-3.0.8 的目录 2014/03/28 10:44 <DIR> . 2014/03/28 10:44 <DIR> .. 2014/03/28 10:44 <DIR> alibaba-rocketmq 2014/03/07 15:08 52pax_global_header 2014/03/28 10:37 <DIR> RocketMQ-3.0.8 1 个文件 52 字节 4 个目录 105,101,885,440 可用字节 D:\machine\RocketMQ-3.0.8>cd alibaba-rocketmq启动服务
D:\machine\RocketMQ-3.0.8\alibaba-rocketmq>start/b bin/mqnamesrv.exe >D:\logs\alibaba-rocketmq/mqnamesrv.log可以通过jps查看一下是不是有了RocketMQ的进程,如下方的6484
C:\Users\houchangren>jps -v 6484 -Djava.ext.dirs=D:\machine\RocketMQ-3.0.8\alibaba-rocketmq\bin/../lib-Drocketmq.home.dir=D:\machine\RocketMQ-3.0.8\alibaba-rocketmq\bin/..-XX:MaxNewSize=512M -XX:MaxPermSize=128M -XX:NewSit abort 6876 JConsole -Denv.class.path=D:\ProgramFiles\Java\jdk1.6.0_26\lib -Dapplication.home=D:\Program Files\Java\jdk1.6.0_26-Djconsole.showOutputViewer 6936org.eclipse.equinox.launcher_1.2.0.v20110502.jar -Dosgi.requiredJavaVersion=1.5-Xms40m -Xmx512m -XX:MaxPermSize=256m 4140 Jps -Denv.class.path=D:\ProgramFiles\Java\jdk1.6.0_26\lib -Dapplication.home=D:\Program Files\Java\jdk1.6.0_26-Xms8m
看日志中信息D:\logs\alibaba-rocketmq/mqnamesrv.log
The Name Server boot success.
D:\machine\RocketMQ-3.0.8\alibaba-rocketmq>start/b bin/mqbroker.exe -n "10.57.41.19:9876">D:\logs\alibaba-rocketmq/mqbroker.log
2.项目实例
1. 创建maven项目
Pom.xml文件如下
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ruishenh</groupId> <artifactId>gomeTest</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>gomeTest Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>3.0.8</version> </dependency> <dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq-all</artifactId> <version>3.0.8</version> <type>pom</type> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>gomeTest</finalName> </build> </project>
2. 编写消息产生者Producer
文件路径:/gomeTest/src/main/java/com/ruishenh/rocketmq/example/Producer.java
package com.ruishenh.rocketmq.example; import java.util.concurrent.TimeUnit; import com.alibaba.rocketmq.client.exception.MQClientException; import com.alibaba.rocketmq.client.producer.DefaultMQProducer; import com.alibaba.rocketmq.client.producer.SendResult; import com.alibaba.rocketmq.common.message.Message; public classProducer { public static void main(String[] args) throws MQClientException, InterruptedException{ /** * 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br> * 注意:ProducerGroupName需要由应用来保证唯一<br> * ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键, * 因为服务器会回查这个Group下的任意一个Producer */ final DefaultMQProducerproducer = newDefaultMQProducer("ProducerGroupName"); producer.setNamesrvAddr("10.57.41.19:9876"); producer.setInstanceName("Producer"); /** * Producer对象在使用之前必须要调用start初始化,初始化一次即可<br> * 注意:切记不可以在每次发送消息时,都调用start方法 */ producer.start(); /** * 下面这段代码表明一个Producer对象可以发送多个topic,多个tag的消息。 * 注意:send方法是同步调用,只要不抛异常就标识成功。但是发送成功也可会有多种状态,<br> * 例如消息写入Master成功,但是Slave不成功,这种情况消息属于成功,但是对于个别应用如果对消息可靠性要求极高,<br> * 需要对这种情况做处理。另外,消息可能会存在发送失败的情况,失败重试由应用来处理。 */ for (int i = 0; i < 10; i++){ try { { Messagemsg = newMessage("TopicTest1",// topic "TagA",// tag "OrderID001",// key ("Hello MetaQA").getBytes());// body SendResultsendResult = producer.send(msg); System.out.println(sendResult); } { Messagemsg = newMessage("TopicTest2",// topic "TagB",// tag "OrderID0034",// key ("Hello MetaQB").getBytes());// body SendResultsendResult = producer.send(msg); System.out.println(sendResult); } { Messagemsg = newMessage("TopicTest3",// topic "TagC",// tag "OrderID061",// key ("Hello MetaQC").getBytes());// body SendResultsendResult = producer.send(msg); System.out.println(sendResult); } }catch(Exception e) { e.printStackTrace(); } TimeUnit.MILLISECONDS.sleep(1000); } /** * 应用退出时,要调用shutdown来清理资源,关闭网络连接,从MetaQ服务器上注销自己 * 注意:我们建议应用在JBOSS、Tomcat等容器的退出钩子里调用shutdown方法 */ // producer.shutdown(); Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { public void run() { producer.shutdown(); } })); System.exit(0); } }
3. 编写消息消费者Consumer
文件路径:Test/src/main/java/com/ruishenh/rocketmq/example/PushConsumer.java
package com.ruishenh.rocketmq.example; import java.util.List; importcom.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer; importcom.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; importcom.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; importcom.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently; importcom.alibaba.rocketmq.client.exception.MQClientException; importcom.alibaba.rocketmq.common.message.MessageExt; public class PushConsumer { /** * 当前例子是PushConsumer用法,使用方式给用户感觉是消息从RocketMQ服务器推到了应用客户端。<br> * 但是实际PushConsumer内部是使用长轮询Pull方式从MetaQ服务器拉消息,然后再回调用户Listener方法<br> */ publicstatic void main(String[] args) throws InterruptedException, MQClientException{ /** * 一个应用创建一个Consumer,由应用来维护此对象,可以设置为全局对象或者单例<br> * 注意:ConsumerGroupName需要由应用来保证唯一 */ DefaultMQPushConsumerconsumer = new DefaultMQPushConsumer( "ConsumerGroupName"); consumer.setNamesrvAddr("10.57.41.19:9876"); consumer.setInstanceName("Consumber"); /** * 订阅指定topic下tags分别等于TagA或TagC或TagD */ consumer.subscribe("TopicTest1","TagA || TagC || TagD"); /** * 订阅指定topic下所有消息<br> * 注意:一个consumer对象可以订阅多个topic */ consumer.subscribe("TopicTest2","*"); consumer.registerMessageListener(newMessageListenerConcurrently() { publicConsumeConcurrentlyStatus consumeMessage( List<MessageExt>msgs, ConsumeConcurrentlyContext context) { System.out.println(Thread.currentThread().getName() +" Receive New Messages: " + msgs.size()); MessageExtmsg = msgs.get(0); if(msg.getTopic().equals("TopicTest1")) { //执行TopicTest1的消费逻辑 if(msg.getTags() != null && msg.getTags().equals("TagA")) { //执行TagA的消费 System.out.println(newString(msg.getBody())); }else if (msg.getTags() != null &&msg.getTags().equals("TagC")) { //执行TagC的消费 System.out.println(newString(msg.getBody())); }else if (msg.getTags() != null &&msg.getTags().equals("TagD")) { //执行TagD的消费 System.out.println(newString(msg.getBody())); } }else if (msg.getTopic().equals("TopicTest2")) { System.out.println(newString(msg.getBody())); } returnConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); /** * Consumer对象在使用之前必须要调用start初始化,初始化一次即可<br> */ consumer.start(); System.out.println("ConsumerStarted."); } }
参考:
http://my.oschina.net/cloudcoder/blog/200741https://github.com/alibaba/RocketMQ/wiki/Quick-Start
相关推荐
- **安装配置**:MQ使用Runmqsc交互式工具和API接口进行配置,配置存储在Windows注册表或Unix配置文件中。而TongLINK/Q采用API接口和配置文件,且仅限东方通内部使用。 - **启动停止**:MQ通过命令行管理界面...
内容概要:本文详细介绍了如何利用STM32和MATLAB实现倒立摆控制系统。首先,文章讲解了硬件部分,包括STM32F4作为主控、TB6612驱动直流电机以及MPU6050进行角度采集。接着,深入探讨了PID控制算法的应用,尤其是增量式PID算法及其参数调节方法。此外,文章强调了MATLAB Simulink仿真的重要性,展示了如何通过Simulink自动生成适用于STM32的嵌入式代码。最后,分享了一些实用技巧,如角度采集的互补滤波算法、PWM输出限幅、硬件设计注意事项等。 适合人群:对嵌入式系统和自动化控制感兴趣的电子工程师、机器人爱好者以及有一定编程基础的学习者。 使用场景及目标:①帮助读者理解并掌握倒立摆控制系统的原理和技术细节;②提供从理论到实践的具体步骤指导,便于读者复现实验;③培养解决实际问题的能力,提高对PID控制和其他相关技术的理解。 其他说明:文中提供了大量源代码片段和硬件设计建议,有助于读者更好地理解和实施项目。同时,作者还分享了许多个人经验和常见错误,使得初学者能够避开一些潜在的陷阱。
内容概要:本文详细介绍了使用组态王6.53构建多种液体混合仿真监控系统的过程。从系统概述出发,涵盖了工程建立、变量定义、画面创建、命令语言编写、监控与调试等多个方面。具体实现了液位监测、阀门控制、搅拌控制、报警处理等功能,并针对可能出现的问题如模拟量输入抖动、阀门死锁、电机启动电流冲击等提供了有效的解决方案。此外,还探讨了硬件配置、数据记录、性能优化等方面的内容,强调了系统稳定性的重要性和实际应用中的注意事项。 适用人群:从事工业自动化领域的工程师和技术人员,尤其是对组态王有一定了解或正在学习组态王的初学者。 使用场景及目标:适用于需要开发类似液体混合仿真监控系统的工程项目,旨在提高系统的稳定性和可靠性,减少故障发生率,提升生产效率。 其他说明:文中不仅提供了详细的步骤指导,还分享了许多作者在实践中积累的经验和技巧,对于理解和掌握组态王的应用具有很高的参考价值。
内容概要:本文详细介绍了双馈风力发电机(DFIG)采用直接功率控制(DPC)策略的Matlab/Simulink模型搭建过程。首先解释了DPC相对于传统矢量控制的优势,然后逐步讲解了模型各组成部分的搭建方法,包括风速模块、风力机模型、双馈发电机模型、变换器模型和直接功率控制器模块。文中还提供了具体的MATLAB代码示例,展示了如何实现风速模拟、功率计算、PI控制算法等功能。此外,文章强调了模型调试过程中需要注意的关键点,如坐标变换、采样频率、滞环宽度等,并分享了一些实用的经验技巧。 适合人群:从事风力发电研究的技术人员、高校相关专业师生、对电力电子控制系统有兴趣的学习者。 使用场景及目标:适用于希望深入了解DFIG运行机制及其控制策略的研究人员和技术开发者。通过构建和仿真该模型,能够更好地掌握DPC的工作原理,优化风力发电系统的性能,提高发电效率和稳定性。 其他说明:文章不仅提供了详细的理论背景介绍,还包括大量实用的操作指南和代码片段,帮助读者快速入门并在实践中不断改进和完善自己的模型。
内容概要:本文详细介绍了使用COMSOL进行三维摩擦发电机数值模拟的方法和技术要点。首先讨论了几何建模的具体步骤,包括使用布尔运算创建咬合结构以及调整电极尺寸。接下来深入探讨了电荷密度的设定方法,强调了自定义场函数的应用及其灵活性。随后讲解了电场分布的计算,特别指出自适应网格细化的重要性,并展示了不同材料组合对电荷密度和电场分布的影响。此外,文中还提到了一些常见的陷阱,如介电常数设置不当可能导致模型偏差,并提供了相应的解决办法。最后,作者分享了一些实用的经验和技巧,帮助提高模拟的准确性和效率。 适合人群:从事电磁学、材料科学或相关领域的研究人员和工程师,尤其是那些希望深入了解摩擦发电机工作机制的人。 使用场景及目标:适用于需要精确模拟和分析摩擦发电机性能的研究项目。主要目标是通过数值模拟优化电荷密度和电场分布,从而提高摩擦发电机的能量转换效率。 其他说明:文中不仅提供了详细的建模指导,还包括了许多实用的代码片段和注意事项,有助于读者更好地理解和应用所学知识。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细探讨了基于能源集线器参数的电热综合能源市场双层出清模型的实现。首先介绍了综合能源系统及其重要组成部分——能源集线器的功能,即作为电、热等不同能源形式的转换和分配枢纽。接着展示了如何使用MATLAB进行参数初始化、上层优化目标计算以及下层市场出清的潮流计算简化。文中还重点讲解了CPLEX在处理双层模型中的作用,如将MPEC问题转化为MILP并通过KKT条件解决市场博弈问题。此外,通过实例演示了电热价差对储热量的影响,并讨论了蒙特卡洛模拟用于处理风光出力不确定性的方法。最后给出了求解器调用时需要注意的问题和调试技巧。 适合人群:从事能源系统研究的专业人士、研究生及以上学历的学生,尤其是那些对电热综合能源市场、能源集线器、MATLAB编程和优化算法感兴趣的人群。 使用场景及目标:适用于希望深入了解并掌握电热综合能源市场运作机制的研究人员和技术开发者。目标是帮助读者理解如何利用MATLAB和CPLEX构建高效的能源管理系统,从而提高能源利用率,降低运营成本。 其他说明:文中提供了大量实用的MATLAB代码片段,有助于读者快速上手实践。同时提醒读者在实际应用中应注意求解器参数配置等问题,确保模型的有效性和准确性。
中心锥锥角对涡喷发动机尾喷管气动性能影响规律研究.pdf
内容概要:本文探讨了如何利用MATLAB代码实现综合能源系统在碳交易机制和需求响应下的优化运行。首先介绍了需求响应模型的两种类型:价格型和替代型。价格型需求响应基于价格弹性矩阵,描述了能源价格变动对用户需求的影响;替代型需求响应则关注电能和热能之间的转换。接着讨论了碳交易机制的构建,包括碳排放量的计算和碳排放配额的分配方法。然后提出了综合能源系统的低碳优化运行模型,设定了购能成本、碳交易成本及运维成本之和最小为目标函数,并通过线性规划求解。最后,通过对四种典型场景的验证,展示了模型的有效性。 适合人群:从事综合能源系统研究的技术人员、研究生及以上学历的研究人员。 使用场景及目标:适用于希望深入了解综合能源系统优化运行机制的人群,尤其是希望通过MATLAB代码实现具体模型构建和技术验证的专业人士。目标是在满足多种约束条件下,实现综合能源系统的低碳优化运行,降低运营成本并有效管理碳排放。 阅读建议:由于涉及较多具体的MATLAB代码实现细节,建议读者具备一定的编程基础和相关领域的背景知识,以便更好地理解和应用文中提供的技术和方法。
内容概要:本文深入探讨了路径规划算法的研究进展,特别是对经典的蚁群算法进行了多项创新性的改进。作者详细介绍了如何利用Matlab实现蚁群算法的基本框架,并针对路径平滑度不足的问题提出了基于Flod算法的双向平滑度优化方法。此外,还自主研发了一种全新的路径规划算法,能够灵活应对不同的地图环境。通过对多种算法的实际性能对比,展示了改进后的蚁群算法在路径长度和平滑度方面的显著提升。 适合人群:对路径规划算法感兴趣的科研人员、工程师以及高校师生。 使用场景及目标:适用于需要高效、平滑路径规划的应用场合,如机器人导航、物流配送系统等。目标是为用户提供一种更为智能化、高效的路径解决方案。 其他说明:文中提供了详细的代码片段和技术细节,有助于读者理解和复现实验结果。同时,强调了算法在实际应用场景中的表现和潜在价值。
图书馆管理系统源代码.7z
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
c++-信息解密-代码
没啥东西
数字集群通信系统综述.pdf
基于谓词逻辑的归结原理研究.pdf
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细探讨了利用改进粒子群算法(MOPSO)解决分布式电源(DG)在配电网中的选址和定容问题。文中介绍了多目标优化的目标函数构建方法,如网损、投资成本和电压偏差的计算,并展示了如何通过动态惯性权重、随机扰动和拥挤度排序等手段提高算法性能。此外,文章还讨论了帕累托解集的维护和最终解的选择策略,强调了实际应用中的物理可行性和参数调优经验。 适合人群:从事电力系统规划、优化算法研究以及相关领域的工程师和技术人员。 使用场景及目标:适用于需要在配电网中合理配置分布式电源的实际工程项目,旨在降低网损、控制投资成本并维持电压稳定,从而提高电网的整体经济性和稳定性。 其他说明:文中提供了具体的代码实现和实际案例分析,帮助读者更好地理解和应用所介绍的方法。同时,作者指出,尽管算法能够提供多种平衡解,但在实际应用中还需结合具体情况进行选择。
Dify智能体:AI智能问数.yml