1. RocketMq 安装与基础知识

140 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

一、windows安装使用

1.下载安装

1.1 下载地址

下载含有 bin-release 的文件
rocketmq.apache.org/

1.2 安装

1.2.1 设置环境变量

环境变量:ROCKETMQ_HOME
值:rocketmq文件解压路径

1.2.2 启动 NameServer
cmd 窗口命令下进入 mq 的 bin 文件夹下面

start mqnamesrv.cmd

启动成功界面

image (4).png

若报错,提示如下

找不到或无法加载主类 Files\Java\jdk1.8.0_151\jre\lib\ext

解决方法: 启动 mqnamesrv.cmd 文件其实是启动 runserver.cmd 文件

image (5).png

在 bin 目录下编辑 runserver.cmd 文件,修改 将原来的 JAVA_HOME 替换成字符串 ,原因是 jdk 默认安装的时候,Program Files 有空格导致

image (6).png

设置 JAVAHOME 变量替换

image (7).png

重新启动就成功了。

1.2.3 启动 Broker
同样,在 bin 目录下,cmd 命令启动

start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true

成功界面

image (8).png

若报错,依旧显示找不到 jdk ,那么按照上面一样,修改编辑 bin 文件夹下的 runbroker.cmd 文件,依旧设置 JAVAHOME 变量,同时还需要需改 CLASSPATH

image (9).png

将 %CLASSPATH% 前后都加上英文的双引号

2. rocketmq-externals 控制台安装

2.1 下载

github.com/apache/rock…

2.2 安装

2.2.1 下载安装里面的 rocketmq-console 项目,这是一个springboot 项目,修改配置文件 application.properties

image (10).png

2.2.2 命令行打包 cmd 命令行打包

mvn clean package -Dmaven.test.skip=true

也可以使用 idea 编译器打包

2.2.3 启动
java -jar 命令启动

image (11).png

3. demo项目使用

3.1 创建一个生产者 Producer.java


/**
 * RocketMq 生产者
 */
public class Producer {

    public static void main(String[] args) throws Exception {

        // 1. 创建一个生产者 并且取名为 group1 的组
        DefaultMQProducer mqProducer = new DefaultMQProducer("group1");

        // 2. 发送给 nameserver
        mqProducer.setNamesrvAddr("localhost:9876");
        mqProducer.start();

        // 3. 发送消息
        String msg = "hello rocketmq!";
        // 创建 消息中的 topic,和 tag 
        Message message = new Message("topic1", "tag1", msg.getBytes());
        SendResult sendResult = mqProducer.send(message);
        System.out.println(sendResult);

        // 4.关闭
        mqProducer.shutdown();
    }
}

消费者


/**
 * 消费者
 */
public class Consumer {

    public static void main(String[] args) throws Exception {
        DefaultMQPushConsumer mqPushConsumer = new DefaultMQPushConsumer("group1");

        mqPushConsumer.setNamesrvAddr("localhost:9876");

        mqPushConsumer.subscribe("topic1", "*");
        mqPushConsumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {

                for (MessageExt messageExt : list) {
                    System.out.println(messageExt);
                    byte[] body = messageExt.getBody();
                    System.out.println(new String(body));
                }
                
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        mqPushConsumer.start();
        System.out.println("消费者启动起来了");

    }
}

4. 消息中间件的作用

消息中间件的作用:异步提升性能、降低系统耦合、流量削峰

4.1 异步提升性能

通过引入 MQ, 系统A执行请求完成之后,不等待系统B,直接返回,执行时间缩短;而且,如果系统A调用系统B,如果系统B出现故障或异常,系统A还得处理系统B的异常,并且导致系统A出现异常。现在使用中间件后,系统A请求发送消息到 MQ,直接返回结果,不管系统B 是否故障

4.2 降低系统耦合

通过引入MQ,两个系统实现了异步化调用,也就实现了解耦,系统A并没有跟系统B耦合,所以互相之 间并没有任何影响

4.3 流量削峰

MQ 天然扛高并发,Mysql 数据库由于复杂,支持数据的增删查改,支持数据的事务,支持复制的sql 执行,所以数据库的并发性比较低;而 MQ 相对简单,只是负责别人给它发消息,别人从它这里再取消息

系统A发送过来的每秒1万请求是一个流量洪峰,然后MQ直接给扛下来了,都存储自己本地磁 盘,这个过程就是流量削峰的过程,瞬间把一个洪峰给削下来了,让系统B后续慢慢获取消息来处理**