RocketMQ 基本使用
来源:互联网 发布:更改淘宝店铺主营类目 编辑:程序博客网 时间:2024/04/27 20:15
目录
- 目录
- 介绍
- 相关地址
- 小试牛刀
- 在Java项目中的使用
- pomxml
- 生产者
- 消费者
- 结果
- 参考
介绍
RocketMQ是阿里巴巴自研的第三代分布式消息中间件。2016年11月,阿里将RocketMQ捐献给Apache软件基金会,正式成为孵化项目。阿里称会将其打造成顶级项目。
2017年2月20日,RocketMQ正式发布4.0版本,专家称新版本适用于电商领域,金融领域,大数据领域,兼有物联网领域的编程模型。
相关地址
- Git地址:https://github.com/apache/incubator-rocketmq
- 编译好的文件:https://rocketmq.incubator.apache.org/dowloading/releases/
- 快速入门:https://rocketmq.incubator.apache.org/docs/quick-start/
- 阿里的最新版本,支持windows:https://github.com/alibaba/RocketMQ/releases/download/v3.2.6/alibaba-rocketmq-3.2.6.tar.gz
小试牛刀
可通过自己下载源码编译或下载编译好的文件,地址见上。
假设是自己下载源码进行编译
下载源码并进行编译
> git clone https://github.com/apache/incubator-rocketmq.git> cd incubator-rocketmq> mvn clean package install -Prelease-all assembly:assembly -U> cd target/apache-rocketmq-all/
Start Name Server
> nohup sh bin/mqnamesrv &> tailf nohup.out
Start Broker
> nohup sh bin/mqbroker -n localhost:9876 &> tailf nohup.out
注意
如果这里启动失败,看一下内存是否足够,可以看一下“runbroker.sh”这个文件,对应的修改参数,如下
JAVA_OPT="-server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m"
测试发送与接收
> export NAMESRV_ADDR=localhost:9876 > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
关闭服务
> sh bin/mqshutdown broker> sh bin/mqshutdown namesrv
在Java项目中的使用
pom.xml
<properties> <rocketmq_ver>4.0.0-incubating</rocketmq_ver></properties><dependencies><dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>${rocketmq_ver}</version></dependency></dependencies>
生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocketmq.client.producer.SendResult;import org.apache.rocketmq.common.message.Message;public class Producer { public static void main(String[] args) { DefaultMQProducer producer = new DefaultMQProducer("Producer"); producer.setNamesrvAddr(Config.ADDR); try { producer.start(); Message msg = new Message("PushTopic", "push", "1", "Just for push1.".getBytes()); SendResult result = producer.send(msg); System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus()); msg = new Message("PushTopic", "push", "2", "Just for push2.".getBytes()); result = producer.send(msg); System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus()); msg = new Message("PushTopic", "pull", "1", "Just for pull.".getBytes()); result = producer.send(msg); System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus()); } catch (Exception e) { e.printStackTrace(); } finally { producer.shutdown(); } }}
消费者
import java.util.List;import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;import org.apache.rocketmq.common.consumer.ConsumeFromWhere;import org.apache.rocketmq.common.message.Message;import org.apache.rocketmq.common.message.MessageExt;public class Consumer { public static void main(String[] args) { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("PushConsumer"); consumer.setNamesrvAddr(Config.ADDR); try { //订阅PushTopic下Tag为push的消息 consumer.subscribe("PushTopic", "push"); /** * 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费<br> * 如果非第一次启动,那么按照上次消费的位置继续消费 */ consumer.setConsumeFromWhere( ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); consumer.registerMessageListener( new MessageListenerConcurrently() { public ConsumeConcurrentlyStatus consumeMessage( List<MessageExt> msgs, ConsumeConcurrentlyContext Context) { for (Message msg : msgs) { System.out.println(new String(msg.getBody()) + ":" + msg.toString()); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } } ); consumer.start(); } catch (Exception e) { e.printStackTrace(); } }}
结果
id:C0A801663174723279CF77AF3C6E0000 result:SEND_OKid:C0A801663174723279CF77AF3C7B0001 result:SEND_OKid:C0A801663174723279CF77AF3C7D0002 result:SEND_OK
Just for push1.:MessageExt [queueId=2, storeSize=184, queueOffset=14, sysFlag=0, bornTimestamp=1490348772974, bornHost=/192.168.127.1:53238, storeTimestamp=1490348775615, storeHost=/192.168.127.128:10911, msgId=C0A87F8000002A9F000000000002EDE8, commitLogOffset=191976, bodyCRC=1396413800, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message [topic=PushTopic, flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=15, KEYS=1, CONSUME_START_TIME=1490348782880, UNIQ_KEY=C0A801663174723279CF77AF3C6E0000, WAIT=true, TAGS=push}, body=15]]Just for push2.:MessageExt [queueId=3, storeSize=184, queueOffset=14, sysFlag=0, bornTimestamp=1490348772987, bornHost=/192.168.127.1:53238, storeTimestamp=1490348775620, storeHost=/192.168.127.128:10911, msgId=C0A87F8000002A9F000000000002EEA0, commitLogOffset=192160, bodyCRC=2014758571, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message [topic=PushTopic, flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=15, KEYS=2, CONSUME_START_TIME=1490348782882, UNIQ_KEY=C0A801663174723279CF77AF3C7B0001, WAIT=true, TAGS=push}, body=15]]
参考
- http://www.infoq.com/cn/news/2017/02/RocketMQ-future-idea
- https://github.com/alibaba/RocketMQ/releases
- https://rocketmq.incubator.apache.org/docs/quick-start/
- http://pan.baidu.com/s/1bogcpgN
2 0
- RocketMQ 基本使用
- RocketMQ使用笔记
- RocketMQ简单使用
- RocketMQ建议使用规范
- rocketmq console 使用注意
- RocketMQ 使用及常见问题
- RocketMQ 使用安装
- RocketMQ 入门使用详解
- RocketMQ的简单使用
- springboot初步使用RocketMQ
- rocketmq入门使用
- rocketmq 使用积累
- RocketMQ 使用案例
- 使用RocketMQ的客户端使用
- RocketMQ的安装与使用
- Linux rocketMQ 安装和使用
- RocketMQ单机部署及使用
- CentOS7 安装RocketMQ并使用
- 基于RTOS的c语言实现http文件上传
- 豆瓣上9分以上的IT书籍-编程语言篇
- Android根据Json直接生成JavaBean
- JAVA文件
- sqoop1,将sqlserver导入hbase
- RocketMQ 基本使用
- maven聚合工程的创建和聚合工程的打包
- Linux 内核时钟之oneshot编程
- iOS 链式编程
- 【C语言】编程规范——头文件
- angular 指令的问题
- maven_项目的依赖、聚合、继承
- mac在命令行使用mysql
- oracle-goldgate