1 yum安装 jdk:
已经安装了jdk的可以跳过 (有些只安装了jre,需要卸载重装 https://blog.csdn.net/a704397849/article/details/103809206)
注:我安装了jdk1.8
2 下载rocketmq
https://github.com/apache/rocketmq/releases
我当前下载到的最新的版本是 4.9.2
百度网盘下载
链接:https://pan.baidu.com/s/17uvg8AMshPdDpVME4GhH7g
提取码:ujif
下载上传到服务器后自己想要存放的路径,解压
tar -zxvf rocketmq-rocketmq-all-4.9.2.tar.gz
3 安装maven
我安装的maven版本 3.6.3
官方下载链接 https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
百度网盘地址
链接:https://pan.baidu.com/s/1XdLAzvoOnIlNhDjEm9ZUsg
提取码:s4cg
下载上传到服务器自己想要的目录后 解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz
配置文件中新增 镜像配置
vi apache-maven-3.6.3/conf/settings.xml 在 下面一行添加镜像配置
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
配置环境变量,vi /etc/profile 在最下面添加以下内容,注意:MAVEN_HOME=/usr/local/src/apache-maven-3.6.3 路径改成你自己实际所放的路径
MAVEN_HOME=/usr/local/src/apache-maven-3.6.3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
然后执行下面命令 让配置生效
source /etc/profile
验证maven安装成功,执行命令
mvn -v
4 编译安装 rocketmq
在 rocketmq-rocketmq-all-4.9.2 目录下执行 mvn -Prelease-all -DskipTests clean install -U
需要等待大概几分钟,最终成功如图
注意:如果 java环境只安装了jre没安装jdk的话,上面操作会失败报错如下:
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
如果是yum安装的jdk,解决办法: https://blog.csdn.net/a704397849/article/details/103809206 ,重装jdk后要执行下命令 source /etc/profile
5 rocketmq 启动
编译安装成功后,rocketmq的安装目录在
rocketmq-rocketmq-all-4.9.2/distribution/target/rocketmq-4.9.2/rocketmq-4.9.2
修改2个启动脚本中 占用内存的配置(默认的内容 2g左右,可能出现内存不足导致启动失败)
注:具体修改多大的内存配置 根据自己项目实际需求决定
进入rocketmq安装目录后,
vi bin/runserver.sh 后编辑如下图
vi bin/runbroker.sh 后编辑如下图
启动 mqnamesrv ,运行日志在当前目录的nohup.out
nohup ./bin/mqnamesrv -n 你的IP:9876 &
注意 IP 看你自己需求,如果外网访问 写你的公网IP ,如果只是内网访问 写内网的IP,如果只是内部单机用 写 127.0.0.1
后面出现的IP 同理
broker配置添加IP
先在conf/broker.conf 中最后 添加两行
namesrvAddr=你的IP:9876
brokerIP1=你的IP
如下图:
启动 mqbroker ,运行日志在当前目录的nohup.out
nohup sh bin/mqbroker -n 你的IP:9876 -c conf/broker.conf autoCreateTopicEnable=true &
关闭服务器
sh bin/mqshutdown broker //停止 broker
sh bin/mqshutdown namesrv //停止 nameserver
6 验证
发送
export NAMESRV_ADDR=你的IP:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
可以看到发送了N条消息,不再发送后 crtl+c 结束 发送测试程序
接收
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
可以看到收到了N条消息,没有新的消息接收后 crtl+c 结束 接收测试程序
到此 rocketmq 安装完成。
7 其他
如 常用命令、控制台等 自行百度吧
8 java 客户端 简单demo源码
maven依赖 注意:安装的rocketmq版本是多少,对应的客户端依赖版本需要一致
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.9.2</version>
</dependency>
消费者
try {
System.out.println("Consumer Starting...");
DefaultMQPushConsumer consumer=new DefaultMQPushConsumer("group_name");//参数是组名
consumer.setNamesrvAddr("127.0.0.1:9876");//
consumer.setInstanceName("consumer_name");
consumer.subscribe("your_topic","*");//topic , tag
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
try {
for (MessageExt msg:list){
System.out.println(String(msg.getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}catch (Exception e){
System.out.println("getMessage error: " + e.getMessage());
}
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
});
consumer.start();
System.out.println("Consumer Started...");
}catch (Exception e){
System.out.println("Consumer Start failed!");
e.printStackTrace();
}
生产者
try {
System.out.println("Producer Starting...");
DefaultMQProducer producer = new DefaultMQProducer("group_name");//参数是组名
producer.setNamesrvAddr("127.0.0.1:9876");
producer.setInstanceName("producer_name");
producer.start();
producer.setRetryTimesWhenSendAsyncFailed(2);//失败重试的几次 , 0 一直尝试
System.out.println("Producer Started...");
for (int i = 0; i < 5; i++) {
try {
final int index = i;
Message msg = new Message("your_topic",
"TagA",
"OrderID188",
"{\"content\":\"Hello world\"}".getBytes(RemotingHelper.DEFAULT_CHARSET));
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.printf("%-10d OK %s %n", index, sendResult.getMsgId());
}
@Override
public void onException(Throwable e) {
System.out.printf("%-10d Exception %s %n", index, e);
e.printStackTrace();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
// producer.shutdown();
}catch (Exception e){
e.printStackTrace();
System.out.println("Producer Start failed!");
}