RocketMQ 简介与环境搭建

1 简介


1.1 官方说明:

RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:

1、支持严格的消息顺序

2、支持TopicQueue两种模式

3、亿级消息堆积能力

4、比较友好的分布式特性

5、同时支持PushPull方式消费消息

1.2 基本概念

看完其实还是不懂,所以我们先了解几个基本概念: 

Producer

消息生产者,负责产生消息,一般由业务系统负责产生消息

Consumer

消息消费者,负责消费消息,一般是后台系统负责异步消费

Push Consumer

Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦收到消息,Consumer对象立刻回调Listener接口方法

Pull Consumer

Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动权由应用控制

Producer Group

一类Producer的集合名称,这类Producer通常发送一类消息,且发送逻辑一致

Consumer Group

一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致

Broker

消息中转角色,负责存储消息,转发消息,一般也称为Server

长连接

在页面嵌入一个隐藏的Iframe,将这个隐藏Iframesrc属性设置为对一个长连接的请求或是采用xhr请求,服务器端就源源不断的向客户端输入数据。

还是晕乎乎,于是继续往下看……

1.3 网络部署

我们先看RocketMQ的网络部署图:


1NameServer是一个几乎无状态的节点,可集群部署,节点之间无任何信息同步。

2Broker部署相对复杂:

a) Broker分为MasterSlave

b)一个Master可以对应多个Slaver,但是一个Slaver只能对应一个Master

3ProducerNameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServerTopic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。

4ConsumerNameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServerTopic路由信息,并向提供Topic服务的MasterSlaver建立长连接,且定时向MasterSlaver发送心跳。Consumer既可从Master订阅消息,也可从Slave订阅消息,订阅规则由Broker配置决定

先有这么个初步印象吧,其实楼主也没太懂,我们可以先单机部署一下,在实践中学习~

2 环境搭建

首先,下面的安装部署基于Linux系统环境:Ubuntu 14.0464位),其他Linux版本可能有所差异

安装步骤:

2.1 安装git环境

apt-get install git-core

2.2 安装Java环境

保证JDK64位的,楼主用的jdk-8u5-linux-x64.tar.gz,解压,并在/etc/profile文件末尾添加环境变量,如下:

export JAVA_HOME=/usr/local/java/jdk1.8.0_05
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
测试

java -v
成功

2.3 安装Maven环境

下载Maven包,楼主用的apache-maven-3.2.2-bin.tar.gz,解压,配置环境变量

<pre name="code" class="html">export M2_HOME=/usr/local/java/apache-maven-3.2.2
export M2=$M2_HOME/bin
export PATH=$M2:$PATH



测试

 mvn -v
成功

注意:网上说source /etc/profile就可以立即生效,但是我重新开一个shell后,新配置的环境变量还是没反应,所以还是注销再重新登录好了。 

2.4 部署RocketMQ Demo

首先下载RocketMQ,地址:https://github.com/alibaba/RocketMQ/releases

也可以去https://git.oschina.net/vintagewang/RocketMQ/attach_files,速度快一点

解压,进入bin目录,

启动Name Server

nohup sh mqnamesrv &

启动BrokerProducerConsumer之前请设置环境变量

export NAMESRV_ADDR=127.0.0.1:9876

启动Broker

nohup sh mqbroker &

测试 jps 看到

3232 Jps
2828 NamesrvStartup
2988 BrokerStartup

ok 

然后尝试收发消息,Github上有给simple example,首先在IDEA里创建Maven项目,将Producer.javaConsumer.java拷进去,配置pom.xml如下,除了junit,只要rocketmq-client就够了,官网上的那个pom.xml各种找不到== 

<projectxmlns="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/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
 <groupId>com.catt</groupId>
 <artifactId>RocketMQTest</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 
 <name>RocketMQTest</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.1.5</version>
        </dependency>
        <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.10</version>
           <scope>test</scope>
       </dependency>
 </dependencies>
</project>

运行Producer.java,看到

SendResult [sendStatus=SEND_OK, msgId=C0A8858200002A9F00000000000006F4,messageQueue=MessageQueue [topic=TopicTest1, brokerName=ubuntu, queueId=0],queueOffset=4]
SendResult [sendStatus=SEND_OK,msgId=C0A8858200002A9F0000000000000788, messageQueue=MessageQueue[topic=TopicTest2, brokerName=ubuntu, queueId=0], queueOffset=4]
SendResult [sendStatus=SEND_OK,msgId=C0A8858200002A9F000000000000081D, messageQueue=MessageQueue[topic=TopicTest3, brokerName=ubuntu, queueId=0], queueOffset=4]
运行PushConsumer.java看到

Consumer Started.
ConsumeMessageThread_1 Receive New Messages: [MessageExt[queueId=0, storeSize=148, queueOffset=3, sysFlag=0,bornTimestamp=1404989616793, bornHost=/192.168.133.130:57879,storeTimestamp=1404989616817, storeHost=/192.168.133.130:10911,msgId=C0A8858200002A9F0000000000000537, commitLogOffset=1335,bodyCRC=1751783629, reconsumeTimes=0, preparedTransactionOffset=0,toString()=Message [topic=TopicTest1, flag=0, properties={MIN_OFFSET=0,MAX_OFFSET=4, KEYS=OrderID001, WAIT=true, TAGS=TagA}, body=11]]]
ConsumeMessageThread_2 Receive New Messages: [MessageExt[queueId=0, storeSize=149, queueOffset=3, sysFlag=0,bornTimestamp=1404989616831, bornHost=/192.168.133.130:57879,storeTimestamp=1404989616834, storeHost=/192.168.133.130:10911,msgId=C0A8858200002A9F00000000000005CB, commitLogOffset=1483,bodyCRC=1751783629, reconsumeTimes=0, preparedTransactionOffset=0,toString()=Message [topic=TopicTest2, flag=0, properties={MIN_OFFSET=0,MAX_OFFSET=4, KEYS=OrderID0034, WAIT=true, TAGS=TagB}, body=11]]]
ConsumeMessageThread_3 Receive New Messages: [MessageExt[queueId=0, storeSize=148, queueOffset=4, sysFlag=0,bornTimestamp=1404989927077, bornHost=/192.168.133.130:57899,storeTimestamp=1404989927096, storeHost=/192.168.133.130:10911,msgId=C0A8858200002A9F00000000000006F4, commitLogOffset=1780,bodyCRC=1751783629, reconsumeTimes=0, preparedTransactionOffset=0,toString()=Message [topic=TopicTest1, flag=0, properties={MIN_OFFSET=0,MAX_OFFSET=5, KEYS=OrderID001, WAIT=true, TAGS=TagA}, body=11]]]
ConsumeMessageThread_4 Receive New Messages: [MessageExt[queueId=0, storeSize=149, queueOffset=4, sysFlag=0,bornTimestamp=1404989927117, bornHost=/192.168.133.130:57899,storeTimestamp=1404989927118, storeHost=/192.168.133.130:10911,msgId=C0A8858200002A9F0000000000000788, commitLogOffset=1928,bodyCRC=1751783629, reconsumeTimes=0, preparedTransactionOffset=0,toString()=Message [topic=TopicTest2, flag=0, properties={MIN_OFFSET=0,MAX_OFFSET=5, KEYS=OrderID0034, WAIT=true, TAGS=TagB}, body=11]]]
至此,demo部署成功,之后就漫漫长路了…… 

3 参考资料

http://blog.csdn.net/alaxing5/article/details/24744789

http://www.changeself.net/archives/category/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6

 

 

阅读更多

没有更多推荐了,返回首页