RocketMQ部署及收发信息

由于公司项目要从阿里云上迁到腾讯云,原ons等服务均不再使用,故选择将RocketMQ部署服务器来替代ons.在此记录部署过程.

 

Apache RocketMQ官网: http://rocketmq.apache.org/docs/quick-start/

 

1.  RocketMQ安装部署

1.1     下载及安装RocketMQ4.2.0

预先装好jdk1.8以上,并配置好环境变量.

开始正式下载安装:

mkdir rocketMQ
cd rocketMQ
wget http://mirrors.hust.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
unzip rocketmq-all-4.2.0-bin-release.zip

因为下载下来的RocketMQ默认在线上环境使用,所以配置要求很高,测试环境中应该先修改jvm相关配置:

cd bin/
vim runbroker.sh
vim runserver.sh
vim tools.sh

将其中的

JAVA_OPT="${JAVA_OPT} -server –Xms*g –Xmx*g–Xmn*g -XX:PermSize=*g -XX:MaxPermSize=*g"

所需内存修改为合适大小

1.2 后台启动Name Server

RocketMQ可以集群主从部署Name Server,这里先示例单机部署

nohup sh mqnamesrv &

 

查看启动日志:

 

tail -f ~/logs/rocketmqlogs/namesrv.log
tail –f nohup.out

查看是否启动:

jps

 

1.3 启动单机broker

 

RocketMQ可以集群主从部署broker,这里先示例单机部署

1.3.1 默认配置启动broker

nohup sh mqbroker &

查看启动日志:

tail -f ~/logs/rocketmqlogs/broker.log
tail –f nohup.out

 

1.3.2 自定义配置文件启动broker

1) 导出默认配置文件:

sh mqbroker -m >broker.p

注意,有的版本导出的文件内容每一行前面会有logger时间及class名等信息,需要去除.

2) 修改配置文件

因为我是将RocketMQ部署在腾讯云服务器上,而测试是在本机进行,所以连接地址要改为腾讯云的公网ip.正式线上可以不开放公网.

另外,测试中可以自动创建topic及订阅组,线上环境建议关闭.

broker.p :

namesrvAddr=140.143.168.123:9876
brokerIP1=140.143.168.123
brokerName= brokerName1
brokerClusterName=DefaultCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
storePathRootDir=/root/store
storePathCommitLog=/root/store/commitlog
flushIntervalCommitLog=500
commitIntervalCommitLog=200
flushCommitLogTimed=false
deleteWhen=04
fileReservedTime=72
maxTransferBytesOnMessageInMemory=262144
maxTransferCountOnMessageInMemory=32
maxTransferBytesOnMessageInDisk=65536
maxTransferCountOnMessageInDisk=8
accessMessageInMemoryMaxRatio=40
messageIndexEnable=true
messageIndexSafe=false
haMasterAddress=
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
cleanFileForciblyEnable=true
transientStorePoolEnable=false

3)使用修改后的配置文件启动broker

nohup sh mqbroker -c broker.p &

 

1.4 关闭nameserver及broker

./mqshutdown broker
./mqshutdown namesrv

 

 

 

1.5 使用mqadmin

mqadmin是RocketMQ的管理控制台,可以查看各种运行信息,增减topic等操作

使用前要先配NAMESRV_ADDR环境变量

export NAMESRV_ADDR="localhost:9876"

mqadmin使用方法:

./mqadmin 

可以使用 ./mqadmin 查看帮助说明.

 

举个例子,查看当前所有topic:

./mqadmin topicList

mqadmin使用比较麻烦,后面会讲一个可视化的控制台.

2.发送接收信息

在项目中使用消费者生产者收发,首先导入依赖包



   com.alibaba.rocketmq
   rocketmq-client
   3.2.6

 

具体代码官网上讲解的非常清楚了,这里直接上例子,具体看注释.

消费者: 

publicclass MQConsumerTest {

    publicstatic Logger logger = LoggerFactory.getLogger(MQConsumerTest.class); 

    static String consumerId = "CID_DEVCENT_LXY";

    static String topic = "topic-a";

    static String tag = "tag-a";

    static String namesrvAddr = "140.143.168.123:9876";

 

    publicstaticvoid main(String[] args) throws MQClientException {

        // 定义消息消费者

        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerId);

        // 定义nameServer地址

        consumer.setNamesrvAddr(namesrvAddr);

        // 订阅主题及tag

        consumer.subscribe(topic, tag);

        // 注册一个监听器

        consumer.registerMessageListener(new MessageListenerOrderly() {// 有序信息

             /**

             * 接受到消息时回调方法

             */

            @Override

            public ConsumeOrderlyStatusconsumeMessage(List msgs, ConsumeOrderlyContext context) {

                 logger.info(Thread.currentThread().getName()+ "Receive New Messages: " + msgs);

                 // 返回消费状态

                // CONSUME_SUCCESS 消费成功

                // RECONSUME_LATER 消费失败,需要稍后重新消费

                return ConsumeOrderlyStatus.SUCCESS;

            }

        });

        // 启动consumer

        consumer.start();

        logger.info("Consumer Started");

    }

 }

 

生产者:

 

publicclass MQProducerTest {

    publicstatic Logger logger = LoggerFactory.getLogger(MQProducerTest.class);

 

    privatestatic String producerId = "PID_devCenterTest";

    privatestatic String topic = "topic-a";

    privatestatic String tag = " tag-a";

    privatestatic String namesrvAddr = "140.143.168.123:9876";

 

    publicstaticvoid main(String[] args) throws MQClientException {

         // 定义消息生产者

        DefaultMQProducer producer = new DefaultMQProducer(producerId);

        // 定义nameServer地址

        producer.setNamesrvAddr(namesrvAddr);

        // 发送超时时间

        producer.setSendMsgTimeout(3000);

         // 在发送消息前,必须调用 start 方法来启动 Producer,只需调用一次即可

        producer.start();

         // 循环发送消息

        for (inti = 0; i < 10; i++) {

            String msgText = "Hello MQ " + i;

            Message msg = new Message(

                    // Message 所属的 Topic

                    topic,

                    // Message Tag 可理解为 Gmail 中的标签,对消息进行再归类,方便 Consumer 指定过滤条件在 MQ 服务器过滤

                    tag,

                    // Message Body 可以是任何二进制形式的数据, MQ 不做任何干预,

                    // 需要 Producer 与 Consumer 协商好一致的序列化和反序列化方式

                    msgText.getBytes());

             try {

                SendResult sendResult = producer.send(msg);

                // 同步发送消息,只要不抛异常就是成功

                if (sendResult != null) {

                    logger.info(new Date() + " Send mq message success. Topicis:" + msg.getTopic() + " msgId is: "

                            + sendResult.getMsgId());

                }

            } catch (Exception e) {

                // 消息发送失败,需要进行重试处理,可重新发送这条消息或持久化这条数据进行补偿处理

                logger.error(new Date() + " Send mq message failed. Topicis:" + msg.getTopic());

                e.printStackTrace();

            }

        }

         // 在应用退出前,销毁 Producer 对象

        // 注意:如果不销毁也没有问题

        producer.shutdown();

    }

}

 

先启动消费者

 

再启动生产者

 

bingo!

 

 

 

3.可视化控制台

apache有一个对RocketMQ 的扩展项目 RocketMQ Externals ,里面有个可视化控制台子项目,可以方便地管理RocketMQ.

 

1.下载RocketMQ Externals

github地址:

https://github.com/apache/rocketmq-externals

 

2.打包rocketmq-console子项目

进入到rocketmq-console文件夹,执行命令

mvn package

该项目使用springboot写的,打包后在target下生成rocketmq-console-ng-1.0.0.jar文件.

 

3.启动控制台

将jar文件拷贝到服务器,执行java命令

nohup java -jar rocketmq-console-ng-1.0.0.jar -Xms128m --server.port=12580 --rocketmq.config.namesrvAddr=203.195.209.94:9876\;203.195.209.95 &

server.port是运行访问这个项目的端口

namesrvAddr写上你的Rocker命名服务地址

 

4.打开控制台

打开浏览器,输入地址,进入控制台界面:

http://localhost:12580

可以选择中文和英文两种语言.

你可能感兴趣的:(RocketMQ部署及收发信息)