持续创作,加速成长!这是我参与「掘金日新计划 · 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
启动成功界面
若报错,提示如下
找不到或无法加载主类 Files\Java\jdk1.8.0_151\jre\lib\ext
解决方法: 启动 mqnamesrv.cmd 文件其实是启动 runserver.cmd 文件
在 bin 目录下编辑 runserver.cmd 文件,修改 将原来的 JAVA_HOME 替换成字符串 ,原因是 jdk 默认安装的时候,Program Files 有空格导致
设置 JAVAHOME 变量替换
重新启动就成功了。
1.2.3 启动 Broker
同样,在 bin 目录下,cmd 命令启动
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
成功界面
若报错,依旧显示找不到 jdk ,那么按照上面一样,修改编辑 bin 文件夹下的 runbroker.cmd 文件,依旧设置 JAVAHOME 变量,同时还需要需改 CLASSPATH
将 %CLASSPATH% 前后都加上英文的双引号
2. rocketmq-externals 控制台安装
2.1 下载
2.2 安装
2.2.1 下载安装里面的 rocketmq-console 项目,这是一个springboot 项目,修改配置文件 application.properties
2.2.2 命令行打包 cmd 命令行打包
mvn clean package -Dmaven.test.skip=true
也可以使用 idea 编译器打包
2.2.3 启动
java -jar 命令启动
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后续慢慢获取消息来处理**