1、下载RocketMQ最新Release版本3.2.6.
地址为: https://github.com/alibaba/RocketMQ/releases
2、把下载下来的tar包上传到服务器
3、安装JDK,设置JAVA_HOME
4、cd /alibaba-rocketmq/bin进入RocketMQ的bin目录
5、安装NameServer
执行
nohup sh mqnamesrv &
namesrv启动之后的默认端口号是9876
[business@ZPaaS1 bin]$ nohup sh mqnamesrv & [2] 21158 [business@ZPaaS1 bin]$ nohup: ignoring input and appending output to `nohup.out' cat nohup.out The Name Server boot success. [business@ZPaaS1 bin]$ jps 21199 Jps 21164 NamesrvStartup 29275 Bootstrap 16910 BrokerStartup [business@ZPaaS1 bin]$
6、安装Broker
这里把Broker跟Namesrv装在一个服务器上面,使用的Broker配置文件是自带的2m-noslave/broker-a.properties。
注意这个配置文件里面没有属性brokerIP1,他默认取本机IP,如果你服务器的网卡设置过于复杂,他会取的IP报错,后续就连不上这个Broker,建议大家手动修改这个IP地址。
cd到以上目录,修改之后的文件如下:
brokerClusterName=DefaultCluster brokerName=broker-a brokerId=0 brokerIP1=10.45.61.33 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH
修改完之后,在cd到 /alibaba-rocketmq/bin目录下启动broker
执行:
nohup sh mqbroker -n "10.45.61.33:9876" -c ../conf/2m-noslave/broker-a.properties &
-n后面代表的是namesrv的地址和端口
-c后面代表的是broker的配置文件地址
[business@ZPaaS1 bin]$ nohup sh mqbroker -n "10.45.61.33:9876" -c ../conf/2m-noslave/broker-a.properties & [1] 21944 [business@ZPaaS1 bin]$ nohup: ignoring input and appending output to `nohup.out' cat nohup.out load config properties file OK, ../conf/2m-noslave/broker-a.properties The broker[broker-a, 10.45.61.33:10911] boot success. and name server is 10.45.61.33:9876
这样就表示broker启动成功
7、使用idea编写测试代码
Producer
public class Producer { public static void main(String[] args) { DefaultMQProducer producer = new DefaultMQProducer("Producer"); producer.setNamesrvAddr("10.45.61.33:9876"); try { producer.start(); Message msg = new Message("PushTopic", "push", "1", "Just for test.".getBytes()); SendResult result = producer.send(msg); System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus()); msg = new Message("PushTopic", "push", "2", "Just for test.".getBytes()); result = producer.send(msg); System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus()); msg = new Message("PullTopic", "pull", "1", "Just for test.".getBytes()); result = producer.send(msg); System.out.println("id:" + result.getMsgId() + " result:" + result.getSendStatus()); } catch (Exception e) { e.printStackTrace(); } finally { producer.shutdown(); } } }
Consumer
public class Customer { public static void main(String[] args) { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("PushConsumer"); consumer.setNamesrvAddr("10.45.61.33:9876"); try { //订阅PushTopic下Tag为push的消息 consumer.subscribe("PushTopic", "push"); //程序第一次启动从消息队列头取数据 consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); consumer.registerMessageListener(new MessageListenerConcurrently() { public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext Context) { Message msg = list.get(0); System.out.println(msg.toString()); return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); } catch (Exception e) { e.printStackTrace(); } } }
8、开始测试
先启动Producer,然后在启动Consumer,就会看到如下的测试结果
producer
id:0A2D3D2100002A9F0000000000000000 result:SEND_OK id:0A2D3D2100002A9F000000000000008D result:SEND_OK id:0A2D3D2100002A9F000000000000011A result:SEND_OK
consumer
MessageExt [queueId=1, storeSize=141, queueOffset=6, sysFlag=0, bornTimestamp=1403765668792, bornHost=/192.168.31.130:60985, storeTimestamp=1403765527374, storeHost=/192.168.58.163:10911, msgId=C0A83AA300002A9F0000000000000A77, commitLogOffset=2679, bodyCRC=753746584, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message [topic=PushTopic, flag=0, properties={TAGS=push, KEYS=2, WAIT=true, MAX_OFFSET=7, MIN_OFFSET=0}, body=14]] MessageExt [queueId=0, storeSize=141, queueOffset=6, sysFlag=0, bornTimestamp=1403765668698, bornHost=/192.168.31.130:60985, storeTimestamp=1403765527356, storeHost=/192.168.58.163:10911, msgId=C0A83AA300002A9F00000000000009EA, commitLogOffset=2538, bodyCRC=753746584, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message [topic=PushTopic, flag=0, properties={TAGS=push, KEYS=1, WAIT=true, MAX_OFFSET=7, MIN_OFFSET=0}, body=14]]
最后,补充一下idea的环境搭建需要依赖的jar包,推荐采用maven的方式,需要在pom.xml文件中引入如下内容:
<dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>3.2.6</version> </dependency>
没有maven环境的话就把下载下来的文件路径下面的libs下面所有jar都依赖一下就可以了。
可能出现的问题:
1、启动broker的时候可能会报初始内存堆太小heap initilize error。不能修改bin/runbroker.sh里面的初始化大小Xmx和Xms这些,小于4G就启动不起来我这边;
后续会研究RocketMQ的使用详细情况,一个个慢慢记录~