ContOS7安装RocketMQ
JDK1.8 安装
前言:
Linux系统安装之后其实是自带了jdk的,但我们需要配置为自己要用的jdk版本。
一,删除原JDK
二,配置新JDK
三,切换JDK
正文:
一,删除原JDK
1,查看系统的Java版本
命令:java -version
2,查看系统安装的jdk
命令:rpm -qa | grep -i jdk
3,删除之前的jdk
命令:rpm -e --nodeps jdk包名 (如:rpm -e --nodeps jdk-1.7.0_75-fcs.x86_64)
注:我的删不掉,不知道为什么,不过不删也没事,之后切换到要用的版本就行了
二,配置新JDK
1,创建jdk安装目录
命令:[root@localhost ~]# mkdir -p /usr/local/src/jdk ([root@localhost ~]# 是为了让大家注意命令执行时所处的文件夹)
2,下载jdk包
方案一:
命令:[root@localhost jdk]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
注意:如果上面wget命令不能用,报错:-bash: wget: command not found。执行一下该命令(安装依赖包) yum -y install wget
注意 : 记住需要加上:--no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" 这段是为了避开用户验证用的
方案二:
在本机先把jdk文件下载好(在我的博客中搜索jdk可以查询到下载步骤,linux用后缀为tar.gz的文件),然后用WinSCP(上一章有介绍)把jdk文件放到对应目录下
jdk下载路径:链接:https://pan.baidu.com/s/1xJ2r4TWqWup_HHKk0wepmg 提取码:zb15
3,解压jdk包
命令:[root@localhost jdk]# tar -zxvf jdk-8u212-linux-x64.tar.gz (文件名可以输入一部分后按tab键自动补全)
4,自定义文件夹名称
命令:[root@localhost jdk]# mv jdk1.8.0_131 jdk1.8
其实可以直接在WinSCP下改,也可以解压改名后再放过来,但我没有尝试
5,配置环境变量
命令:[root@localhost bin]# vi /etc/profile (可以看到这个文件的内容,profile文件有点类似于windows系统里面的环境变量的配置)
shift + g 定位到最后一行
这个时候按一下a或i键,进入编辑模式
需要配置的内容:
export JAVA_HOME=/root/soft/jdk1.8.0_131
export PATH=JAVA_HOME/bin
6,退出文件,保存
按Esc键 输入:wq 保存并退出
7,让配置文件生效
命令:[root@localhost jdk]# source /etc/profile
8,查看是否配置成功
命令:java -version
因为我前面没有卸载原有的JDK,所以这里还是显示的原JDK版本号
三,切换JDK
- 查看当前系统内有几个可用的Java
命令:alternatives --config java
想要我们新安装的1.8能够显示出来,还需要再做处理
- 添加已安装的jdk1.8
命令: alternatives --install <链接> <名称> <路径> <优先度>
alternatives --install /usr/bin/java java /root/soft/jdk1.8.0_131/bin/java 2
-
选择要使用的jdk
命令:alternatives --config java
要选择哪个,就输入哪个编号,回车就行(比如我需要1.8,就是输入2,回车)
java -version 查看是否配置成功
安装RocketMQ
参考官网
http://rocketmq.apache.org/docs/quick-start/
下载软件包
wget https://archive.apache.org/dist/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
unzip rocketmq-all-4.7.1-bin-release.zip
启动异常处理:
[root@localhost bin]# ./mqbroker -n localhost:9876
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /root/soft/rocketmq-all-4.7.1-bin-release/bin/hs_err_pid13941.log
# 原因:rocketmq默认的使用内存4G,虚拟机内存不足
# 解决:将以下sh脚本添加到文件中,关于jvm内存参数调整到系统内存容序的参数值
[root@localhost bin]# vim runbroker.sh
[root@localhost bin]# vim runserver.sh
[root@localhost bin]# vim tools.sh
例如:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
操作命令
cd rocketmq-all-4.7.1-bin-release/bin
-
启动NameServer
# 1.启动NameServer mqnamesrv 后台启动:`nohup sh mqnamesrv &` # 2.查看启动日志 tail -f ~/logs/rocketmqlogs/namesrv.log # 3.停止服务 sh mqshutdown namesrv
-
启动Broker
# 1.启动Broker mqbroker -n localhost:9876 后台启动:`nohup sh mqbroker -n localhost:9876 &` # 2.查看启动日志 tail -f ~/logs/rocketmqlogs/broker.log # 3.停止服务 sh mqshutdown broker
-
查看启动
[root@localhost bin]# jps
43427 Jps
34423 BrokerStartup
33739 NamesrvStartup
4. 关闭服务
~~~shell
[root@localhost bin]# sh mqshutdown broker
The mqbroker(34423) is running...
Send shutdown request to mqbroker(34423) OK
[root@localhost bin]# sh mqshutdown namesrv
The mqnamesrv(33739) is running...
Send shutdown request to mqnamesrv(33739) OK
创建主题topic
sh mqadmin updateTopic -b 127.0.0.1:10911 -t TopicA
创建消费组
sh mqadmin updateSubGroup -b 127.0.0.1:10911 -g SubGroupA
-
消息发送测试
-
先启动消费者
export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
-
-
再启动生产者
export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Producer
可以看到生产者发送了很多消息,消费者在几秒之后也受到了消息。
rocketmq可以外网访问
-
修改broker配置
cd rocketmq-all-4.7.1-bin-release/bin
sh mqshutdown broker
sh mqbroker -m >broker.p
vim broker.p
修改里面的IP地址如下
namesrvAddr=192.168.142.128:9876
brokerIP1=192.168.142.128
brokerName=localhost
brokerClusterName=DefaultCluster
[root@localhost bin]# cat broker.c
namesrvAddr=192.168.142.128:9876
brokerIP1=192.168.142.128
brokerName=localhost.localdomain
brokerClusterName=DefaultCluster
brokerId=0
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
msgTraceTopicName=RMQ_SYS_TRACE_TOPIC
traceTopicEnable=false
rejectTransactionMessage=false
fetchNamesrvAddrByAddressServer=false
transactionTimeOut=6000
transactionCheckMax=15
transactionCheckInterval=60000
aclEnable=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
-
启动配置
# 启动namesrv nohup sh mqnamesrv & # 启动broker nohup sh mqbroker -c broker.p autoCreateTopicEnable=true &
实例代码
生产者
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("192.168.142.128:9876");
producer.start();
for (int i = 1000; i < 2000; i++) {
try {
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
producer.shutdown();
}
}
消费者
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
consumer.setNamesrvAddr("192.168.142.128:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List msgs,
ConsumeConcurrentlyContext context) {
System.out.printf(Thread.currentThread().getName() + " Receive New Messages: " + msgs + "%n");
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("Consumer Started.%n");
}
}
问题处理
MQClientException: No route info of this topic, TopicTest
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
RocketMQ—connect to 192.168.xxx.xxx:9876 failed
1.相互之间ping一下看看能不能通;
2.ping一下外网看看能不能通(一般使用桥接模式);
如果上述两个都通,那说明网络上应该是没什么问题的.
3.看看后台进程中是否有开启相应的服务,如果有9876端口,那就说明是正常的
netstat -ntlp
4.相互之间telnet一下
telnet 192.168.142.128 9876
如果未安装telnet,可以通过如下命令进行安装:
yum list telnet* 查看telnet相关的安装包
yum install telnet-server 安装telnet服务
yum install telnet.* 安装telnet客户端
一般情况出现上述错误这边telnet应该是不通的,原因是防火墙开着,我们需要将防火墙关闭.
1.firewall防火墙
(1)首先查看防火墙的状态
systemctl status firewalld
(2)如果防火墙开着,那么将其关闭
systemctl stop firewalld
systemctl disable firewalld #禁止firewall开机启动
2.iptables防火墙
这个很容易被忽视,或者是一不小心被打开,步骤依然如上
(1)先查看其状态
service iptables status
(2)如果开着将其关闭
service iptables stop --临时关闭防火墙
chkconfig iptables off --永久关闭防火墙
尊重原创
参考地址:
https://blog.csdn.net/kkgbn/article/details/78255471
https://blog.csdn.net/gwd1154978352/article/details/80785530