介绍

RocketMQ是阿里巴巴自研的第三代分布式消息中间件,是阿里系下开源的一款分布式、队列模型的消息中间件,原名Metaq,3.0 版本名称改为RocketMQ,是阿里参照kafka设计思想使用Java实现的一套MQ。同时将阿里系内部多款MQ产品(Notify、metaq)进行整合,只维护核心功能,去除了所有其他运行时依赖,保证核心功能最简化,在此基础上配合阿里上述其他开源产品实现不同场景下MQ的架构。

2016年11月,阿里将RocketMQ捐献给Apache软件基金会,正式成为孵化项目。阿里称会将其打造成顶级项目。

2017年2月20日,RocketMQ正式发布4.0版本,专家称新版本适用于电商领域,金融领域,大数据领域,兼有物联网领域的编程模型。

相关地址

小试牛刀

可通过自己下载源码编译或下载编译好的文件,地址见上。

假设是自己下载源码进行编译

下载源码并进行编译

  1. > git clone https://github.com/apache/incubator-rocketmq.git
  2. > cd incubator-rocketmq
  3. > mvn clean package install -Prelease-all assembly:assembly -U
  4. > cd target/apache-rocketmq-all/

Start Name Server

  1. > nohup sh bin/mqnamesrv &
  2. > tailf nohup.out

Start Broker

  1. > nohup sh bin/mqbroker -n localhost:9876 &
  2. > tailf nohup.out

注意如果这里启动失败,看一下内存是否足够,可以看一下“runbroker.sh”这个文件,对应的修改参数,如下

  1. JAVA_OPT="-server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m"

测试发送与接收

  1. > export NAMESRV_ADDR=localhost:9876
  2. > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
  3. > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

关闭服务

  1. > sh bin/mqshutdown broker
  2. > sh bin/mqshutdown namesrv

在Java项目中的使用

pom.xml

  1. <properties>
  2. <rocketmq_ver>4.0.0-incubating</rocketmq_ver>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>org.apache.rocketmq</groupId>
  7. <artifactId>rocketmq-client</artifactId>
  8. <version>${rocketmq_ver}</version>
  9. </dependency>
  10. </dependencies>

生产者

  1. import org.apache.rocketmq.client.producer.DefaultMQProducer;
  2. import org.apache.rocketmq.client.producer.SendResult;
  3. import org.apache.rocketmq.common.message.Message;
  4. public class Producer {
  5. public static void main(String[] args) {
  6. DefaultMQProducer producer = new DefaultMQProducer("Producer");
  7. producer.setNamesrvAddr(Config.ADDR);
  8. try {
  9. producer.start();
  10. Message msg = new Message("PushTopic", "push", "1", "Just for push1.".getBytes());
  11. SendResult result = producer.send(msg);
  12. System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus());
  13. msg = new Message("PushTopic", "push", "2", "Just for push2.".getBytes());
  14. result = producer.send(msg);
  15. System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus());
  16. msg = new Message("PushTopic", "pull", "1", "Just for pull.".getBytes());
  17. result = producer.send(msg);
  18. System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus());
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. } finally {
  22. producer.shutdown();
  23. }
  24. }
  25. }

消费者

  1. import java.util.List;
  2. import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
  3. import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
  4. import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
  5. import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
  6. import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
  7. import org.apache.rocketmq.common.message.Message;
  8. import org.apache.rocketmq.common.message.MessageExt;
  9. public class Consumer {
  10. public static void main(String[] args) {
  11. DefaultMQPushConsumer consumer =
  12. new DefaultMQPushConsumer("PushConsumer");
  13. consumer.setNamesrvAddr(Config.ADDR);
  14. try {
  15. //订阅PushTopic下Tag为push的消息
  16. consumer.subscribe("PushTopic", "push");
  17. /**
  18. * 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费<br>
  19. * 如果非第一次启动,那么按照上次消费的位置继续消费
  20. */
  21. consumer.setConsumeFromWhere(
  22. ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
  23. consumer.registerMessageListener(
  24. new MessageListenerConcurrently() {
  25. public ConsumeConcurrentlyStatus consumeMessage(
  26. List<MessageExt> msgs,
  27. ConsumeConcurrentlyContext Context) {
  28. for (Message msg : msgs) {
  29. System.out.println(new String(msg.getBody()) + ":" + msg.toString());
  30. }
  31. return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
  32. }
  33. }
  34. );
  35. consumer.start();
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. }

结果

  1. id:C0A801663174723279CF77AF3C6E0000 result:SEND_OK
  2. id:C0A801663174723279CF77AF3C7B0001 result:SEND_OK
  3. id:C0A801663174723279CF77AF3C7D0002 result:SEND_OK
  1. 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]]
  2. 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]]

参考

RocketMQ 介绍与基本使用的更多相关文章

  1. 转 消息中间件:RocketMQ 介绍(特性、术语、原理、优缺点、消息顺序、消息重复)

    https://blog.csdn.net/jiangyu1013/article/details/81668671 消息中间件的作用 1. 应用解耦 2. 异步处理 比如用户注册场景,注册主流程完成 ...

  2. RocketMQ介绍与云服务器安装

    RocketMQ 介绍与概念 在github上的说法来看: Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可扩展性.它提供了多种功能: ...

  3. rocketmq学习(一) rocketmq介绍与安装

    1.消息队列介绍 消息队列本质上来说是一个符合先进先出原则的单向队列:一方发送消息并存入消息队列尾部(生产者投递消息),一方从消息队列的头部取出消息(消费者消费消息).但对于一个成熟可靠的消息队列来说 ...

  4. RocketMQ介绍与实践

    一.RocketMQ介绍         1.相关术语名词 1.  NameSrv:是一个几乎无状态节点,可集群部署,节点之间无任何信息同步. 2.  Broker:分为Master与Slave,一个 ...

  5. RocketMQ 介绍与安装

    目录 RocketMQ 介绍 MQ 介绍 MQ 作用 MQ 缺点 MQ 常见产品 RocketMQ 简介 RocketMQ 架构 RocketMQ 安装 RocketMQ 介绍 MQ 介绍 定义: M ...

  6. RocketMQ之一:RocketMQ整体介绍

    常用MQ介绍及对比--<MQ详解及四大MQ比较> RocketMQ环境搭建--<RocketMQ之三:RocketMQ集群环境搭建> RocketMQ物理部署结构 Rocket ...

  7. RockerMQ介绍 及搭建双master模式

    一.RocketMQ介绍 1.1 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机 ...

  8. RocketMQ集群搭建

    1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅 ...

  9. 49.RocketMQ 双主搭建(本文非EamonSec原创)

    声明:本文非EamonSec原创,copy自网上下载的某个个文件 1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 ...

随机推荐

  1. 车大棒浅谈jQuery源码(一)

    背景 因为最近辞职找工作,投了许多家公司.结果简历要么石沉大海,一点音讯都没有,要么就是邮件回复说不匹配.后面加了一些QQ群,才发现原来我工作经验年限太少了.现在深圳都是3经验起步,北京据说更加恐怖. ...

  2. iOS 10 语音识别Speech Framework详解

    最近做了一个项目,涉及到语音识别,使用的是iOS的speech Framework框架,在网上搜了很多资料,也看了很多博客,但介绍的不是很详细,正好项目做完,在这里给大家详解一下speech Fram ...

  3. JSTL 核心标签库 使用(转)

    在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JST ...

  4. DUBBO高级配置:多注册中心配置

    有时候我们需要的服务不在同一个 zookeeper 注册中心上,此时我们需要在 DUBBO 配置文件中配置多个注册中心. 下面我们在之前创建项目的基础上在 provider 模块中增加一个 IBook ...

  5. .Net EF框架的增删改查

    创建上下文对象: WordBoradEntities db = new WordBoradEntities(); 添加: //1.1创建实体对象 User uObj = new User() { uN ...

  6. C#非泛型集合和泛型集合的超级详解

    C# 泛型集合之非泛型集合类与泛型集合类的对应: ArrayList对应List HashTable对应Dictionary Queue对应Queue Stack对应Stack SortedList对 ...

  7. JAVA加密算法系列-BASE64

    package ***; import java.io.IOException; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encode ...

  8. ORA-00918: 未明确定义列

    ORA-00918: 未明确定义列 出现问题原因及解决办法. --正常写,结果带上表名的字段在处理后表头名称相同,在进行下一次嵌套时就会出现问题  select au.userxm,au01.user ...

  9. Android系统结构

    从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层.应用程序框架层.系统运行库层以及Linux内核层,分别介绍如下: (1)Appliacation Android平台不 ...

  10. selenium实例:unittest框架+PO开发模式

    这是<selenium2+python学习总结>的升级版. 1.         项目结构 2.         项目代码 1)         globalparameter.py # ...