ContOS7 安装RocketMQ

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

image.png

6,退出文件,保存

按Esc键 输入:wq 保存并退出

7,让配置文件生效

命令:[root@localhost jdk]# source /etc/profile

8,查看是否配置成功

命令:java -version

因为我前面没有卸载原有的JDK,所以这里还是显示的原JDK版本号

三,切换JDK

  1. 查看当前系统内有几个可用的Java

命令:alternatives --config java

想要我们新安装的1.8能够显示出来,还需要再做处理

  1. 添加已安装的jdk1.8

命令: alternatives --install <链接> <名称> <路径> <优先度>

alternatives --install /usr/bin/java java /root/soft/jdk1.8.0_131/bin/java 2

  1. 选择要使用的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

  1. 启动NameServer

    # 1.启动NameServer 
    mqnamesrv 
    后台启动:`nohup sh mqnamesrv &`
    # 2.查看启动日志 
    tail -f ~/logs/rocketmqlogs/namesrv.log
    # 3.停止服务
    sh mqshutdown namesrv
    
  1. 启动Broker

    # 1.启动Broker 
    mqbroker -n localhost:9876 
    后台启动:`nohup sh mqbroker -n localhost:9876 &`
    # 2.查看启动日志 
    tail -f ~/logs/rocketmqlogs/broker.log
    # 3.停止服务
    sh mqshutdown broker
    
  2. 查看启动

[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
  1. 消息发送测试

    1. 先启动消费者

      export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
      
  1. 再启动生产者

    export NAMESRV_ADDR=localhost:9876 && sh tools.sh org.apache.rocketmq.example.quickstart.Producer
    

    可以看到生产者发送了很多消息,消费者在几秒之后也受到了消息。

rocketmq可以外网访问

  1. 修改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
  1. 启动配置

    # 启动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

你可能感兴趣的:(ContOS7 安装RocketMQ)