RocketMQ部署和使用

好久没有更新博客了,这次讲讲RocketMQ的部署和使用。
http://rocketmq.apache.org/
首先去下载源码,网站上有说明RocketMQ的部署环境:
1、64bit OS, Linux/Unix/Mac is recommended;
2、64bit JDK 1.8+;
3、Maven 3.2.x
4、Git
这里的Git可有可无(用于Git工具从GitHub下载RocketMQ源码),如果没有也可以直接去上面的地址下载RocketMQ源码。
下载完成以后,根据 http://rocketmq.apache.org/docs/quick-start/ 的步骤完成解压、编译、运行。
待到Name Server和Broker都跑起来,就可以运行Java代码测试功能了。

MQProducer

package MQProducer;

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("127.0.0.1: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();
        }
    }
}

MQConsumer

package MQConsumer;

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;

import java.util.List;

public class Consumer {
    public static void main(String[] args){
        DefaultMQPushConsumer consumer =
                new DefaultMQPushConsumer("PushConsumer");
        consumer.setNamesrvAddr("127.0.0.1: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();
        }
    }
}
RocketMQ订阅是根据Topic的信息来的,所以这里只能收到PushTopic的消息,而收不到PullTopic的。

注意:下列jar包一个都不能少。

fastjson-1.2.44.jar
netty-all-4.1.19.Final.jar
rocketmq-client-4.2.0.jar
rocketmq-common-4.2.0.jar
rocketmq-remoting-4.2.0.jar
slf4j-api-1.7.25.jar
slf4j-nop-1.7.25.jar

slf4j是RocketMQ记录日志的。fastjson也是必要的,如果没有这个jar包,可能会出现找不到路由的错误。

java -version

java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)

mvn -v

Apache Maven 3.5.2

RocketMQ version

4.2.0

最后,开启RocketMQ,跑代码
RocketMQ

猜你喜欢

转载自blog.csdn.net/u012138272/article/details/79050907