RocketMQ 安装

本次安装暂时只部署一个Broker,一个Namesrv,两个进程都安装在服务器上面,在自己本机用idea做的测试。
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的使用详细情况,一个个慢慢记录~

猜你喜欢

转载自flyingtosky.iteye.com/blog/2204555