RocketMQ 使用及常见问题

前言

本文档是针对RocketMQ使用及常见问题的说明。

一.获取项目、安装包及文档

1. alibaba/RocketMQ

https://github.com/alibaba/RocketMQ                             

2. Download the latest release package

https://github.com/alibaba/RocketMQ/releases

3. Get the latest document & Who using RocketMQ

https://github.com/alibaba/RocketMQ/issues/1

二.Linux常用命令

1.切换用户

1)su – root

2)普通用户登录,切换为root用户。

3)带杠表示表示切换到当前用户目录~

2.查询已安装的jdk

1)rpm -qa|grep jdk

2)rpm -qa 查询所有rpm包。q是查询,a是all。竖杠是管道操作符,就是把查询结果作为输入给grep命令。grep jdk是正则匹配带jdk的结果。

3. 卸载jdk

1)rpm -e --nodeps jdk1.8.0_25-1.8.0_25-fcs.x86_64

2)使用 rpm -e --nodeps <包的名字> 不检查依赖,直接删除rpm包

3)erase | don't verify package dependencies

4. Linux服务器之间复制文件或目录

1) scp
Secure copy, similar in function to rcp, copies files between two different networked machines, but does so using authentication, and with a security level similar to ssh.

  1. cp /home/stacy/images/image*.jpg /home/stacy/archive
  2. scp /home/stacy/images/image*.jpg stacy@myhost.com:/home/stacy/archive
  3. scp stacy@myhost.com:/home/stacy/archive/image*.jpg /home/stacy/downloads
  4. scp user@myhost.com:/home/user/dir1/file.txt user@myhost.com:/home/user/dir2
  5. scp someuser@alpha.com:/somedir/somefile.txt someuser@beta.com:/anotherdir

2)move or rename files

mv /old /new

5.安装jdk

1)rpm -i jdk-7u71-linux-x64.rpm

2)执行命令前需进入到文件所在目录

Install/Upgrade/Erase options:

-i, --install                    install package(s)

6.安装rocketmq

1)tar xzvf [some.tar.gz]

x, --extract, --get

Extract files from an archive.

-z, --gzip, --gunzip
This option tells tar to read or write archives through gzip, allowing tar to directly operate on several kinds of compressed archives transparently. This option should be used, for example, when operating on files with the extension .tar.gz.

-v, --verbose 

Operate verbosely.

-f, --file=ARCHIVE 

Use archive file (or device) ARCHIVE.

7.创建文件夹

1)mkdir myfile

8.删除文件夹

1)rm –rf [dir]

2)参数解释

-f或–force  强制删除文件或目录。 

-r或-R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。

-v或–verbose  显示指令执行过程。 

3)rm  -rf /[dir]/*

9.配置环境变量

1)vi + /etc/profile

2)向文件里面追加以下内容

JAVA_HOME=/usr/java/jdk1.7.0_71

JRE_HOME=/usr/java/jdk1.7.0_71/jre

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

ROCKETMQ_HOME=/app/alibaba-rocketmq

 

export JAVA_HOME JRE_HOME PATH CLASSPATH ROCKETMQ_HOME

3)使修改立即生效

source /etc/profile

4)查看环境变量值

echo $PATH

5)添加权限写权限

chmod 644 /etc/profile

chmod -R 777 apache-tomcat-server

6)备注

vi filename 打开或新建文件,并将光标置于第一行首

vi +n filename 打开文件,并将光标置于第n行首

vi + filename 打开文件,并将光标置于最后一行首

vi 命令打开文件,i 进入编辑模式 esc进入命令模式

:q! 强制退出不保存

:wq! 强制保存并退出。

profile中export的作用:export命令将使系统在创建每一个新的shell时,定义这个变量的一个拷贝。执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;一个shell中的系统环境变量会被复制到子shell中(用export定义的变量);一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消(并不能返回到父shell中)。不用export定义的变量只对该shell有效,对子shell也是无效的。

10.查看tomcat日志

1)tail -f catalina.out

2)追踪日志,动态显示

3)

tail -f /app/apache-tomcat-server/apache-tomcat-8.0.15-8001/logs/catalina.out

Ctrl + c 

11.查看tomcat进程

1)ps -ef |grep tomcat

2)grep 会把列头过滤掉,请注意。

 

UID

PID

PPID

C

STIME

TTY

TIME

CMD

用户ID

进程ID

父进程ID

CPU占用率

开始时间

开始此进程的TTY

次进程运行的总时间

命令名

12.查看文件夹大小和文件大小和磁盘剩余空间

1)du -h --max-depth=1     一级目录大小

2) du -h --max-depth=1 *error.log

2)du -h                  目录大小

3)ll -h

4)df -hl

5)  df -hl /root    查看/root 目录已使用和可用情况

必要参数:

-a 全部文件系统列表

-h 方便阅读方式显示

-H 等于“-h”,但是计算式,1K=1000,而不是1K=1024

-i 显示inode信息

-k 区块为1024字节

-l 只显示本地文件系统

-m 区块为1048576字节

--no-sync 忽略 sync 命令

-P 输出格式为POSIX

--sync 在取得磁盘信息前,先执行sync命令

-T 文件系统类型

13.杀死进程

1)kill -9 [PID]

14.linux定时任务

1)crontab -e                  编辑任务

2)service crond status          查看服务状态

3)

http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

4)示例

# every hour delete rocketmq logs

* */1 * * * find /root/logs/rocketmqlogs/otherdays/* -exec rm -rf {} \;

三.Broker集群部署

1.系统优化

1)sh $ROCKETMQ_HOME/bin/os.sh

2)在sh命令前加nohup ,执行命令的结果会输出拼接到hohup.out 文件,more hohup.out查看文件内容。否则信息输出到控制台。在命令结尾加$ 是把作业放在后台执行。

2.启动name service

1)sh mqnamesrv &

2)需要进入到bin目录,或者使用全路径

3)当The Name Server boot success.之后,再次启动name service 会报地址已经被占用。

3.Broker 集群部署[多Master多Slave模式,异步复制]

1)进入$ROCKETMQ_HOME/conf/2m-2s-async/ 修改properties配置文件

2)配置文件

broker-a.properties

broker-a-s.properties

broker-b.properties

broker-b-s.properties

3)启动broker

### 在机器 A,启动第一个 Master

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties &

 

### 在机器 B,启动第一个 Slave

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties &

 

### 在机器 C,启动第二个 Master

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties &

 

### 在机器 D,启动第二个 Slave

sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties &

4)《开发指导》文档中,详细记录了各个参数,都可以设到properties文件里。

5)启动时可以 -n 指定多个namesrv。例如 sh mqbroker –n "10.128.2.22:9876;10.128.2.23:9876" -c$ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &

6)注意路径sync 和async 不要马虎。推荐namesrv也配置到properties文件中。

7)如果一台机器想启动多个broker ,需要修改监听端口(默认为10911),否则报地址已经被占用。

8)如果Name Server 未启动或者不能连接到服务器,指定该name service 的producer发消息,会报:No route info of this topic。

9)启动第一个broker 不需要指定listenPort ,默认占用10911和10912端口,所以一台机器启动两个broker 时,第二个broker端口应该设置10913,10914 。

listenPort=10913

haListenPort=10914

10)特别注意!!

haListenPort 在《指导》中没有说明。

11)查看系统端口占用情况

netstat -apn|grep 1091

12)详细参数设置需要自行查阅《RocketMQ Developer Guide.pdf》文档。

13)RocketMQ 控制台:

进入 RocketMQ/bin

sh mqadmin

查看哪些命令

sh mqadmin help [命令名]

显示帮助信息

例如执行查看23 server的集群消息

sh mqadmin clusterList -n 10.128.2.23:9876

14)删除topic

sh mqadmin clusterList -n 172.16.50.238:9876

sh mqadmin deleteTopic -c DefaultCluster -n 172.16.50.238:9876 -t USERLOGIN

4.关闭

sh mqshutdown namesrv

sh mqshutdown broker

5.退出

1)exit

2)使用xshell启动服务后,退出时需要用命令exit  。 如果直接点关闭程序按钮关闭终端,会导致刚才的进程被关闭。特别注意!!。

四.验证broker机制

1.方案 master-slave

1)单机启动a、a-s

2)DefaultPushConsumer 设置为单线程

3)consumer 打断点

4)producer 发送10条消息

5)consumer消费一条消息后kill 掉master

6)结果:producer不能继续发送消息,no route info; consumer 可以继续消费剩余的9条信息。

五.项目运行遭遇的问题

1.磁盘空间不够

1)

com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 14  DESC: service not available now, maybe disk full, CL:  0.87 CQ:  0.87 INDEX:  0.87, maybe your broker machine memory too small.

2)位于$HOME/logs/rocketmqlogs/

下的日志文件,占用太多空间。

3)解决问题:修改源码中日志文件位置,参考《RocketMQ自定义文件路径.docx》

2.tomcat服务器挂掉了

1)

20-Apr-2015 00:39:07.158 SEVERE [http-nio-8002-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed

java.io.IOException: Too many open files

    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)

    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:241)

    at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:688)

    at java.lang.Thread.run(Thread.java:745)

2)需要修改tomcat启动参数

3.挂掉了

1)

24-Apr-2015 10:10:48.529 SEVERE [http-nio-8002-ClientPoller-0] org.apache.tomcat.util.net.NioEndpoint$Poller.run

java.lang.OutOfMemoryError: unable to create new native thread

    at java.lang.Thread.start0(Native Method)

    at java.lang.Thread.start(Thread.java:714)

    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950)

    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1368)

    at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:161)

    at org.apache.tomcat.util.threads.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:141)

    at org.apache.tomcat.util.net.NioEndpoint.processSocket(NioEndpoint.java:627)

    at org.apache.tomcat.util.net.NioEndpoint$Poller.processKey(NioEndpoint.java:1129)

    at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:1087)

    at java.lang.Thread.run(Thread.java:745)

2) producer 发消息改为单例模式,由spring管理。

4. DefaultMQProducer 构造失败,构造参数为空

1)

com.alibaba.rocketmq.client.exception.MQClientException: The producer service state not OK, START_FAILED

See https://github.com/alibaba/RocketMQ/issues/43 for further details.

    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.makeSureStateOK(DefaultMQProducerImpl.java:445)

    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:517)

    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1059)

    at com.alibaba.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:122)

    at com.alibaba.rocketmq.example.quickstart.Producer.main(Producer.java:53)

2) Spring单例模式的DefaultMQProducer在linux服务器时不好用,发消息失败

The producer service state not OK

原因:参数未取到,出现new DefaultMQProducer(null) 抛异常导致start未调用

解决办法:优化逻辑,保证成功启动

 

5.rocketmq storeerror.log

2015-04-25 23:00:10 WARN WriteSocketService - findMapedFileByOffset offset not matched, request Offset: 2687768, index: -2, mapedFileSize: 1073741824, mapedFiles count: 2, StackTrace:

    java.lang.Thread.getStackTrace(Thread.java:1589)

    com.alibaba.rocketmq.common.UtilAll.currentStackTrace(UtilAll.java:63)

    com.alibaba.rocketmq.store.MapedFileQueue.findMapedFileByOffset(MapedFileQueue.java:467)

    com.alibaba.rocketmq.store.CommitLog.getData(CommitLog.java:156)

    com.alibaba.rocketmq.store.CommitLog.getData(CommitLog.java:150)

    com.alibaba.rocketmq.store.DefaultMessageStore.getCommitLogData(DefaultMessageStore.java:818)

    com.alibaba.rocketmq.store.ha.HAConnection$WriteSocketService.run(HAConnection.java:334)

    java.lang.Thread.run(Thread.java:745)

6.

2015-04-25 22:57:57 WARN DispatchMessageService - [BUG]logic queue order maybe wrong, expectLogicOffset: 13047200 currentLogicOffset: 13048100 Topic: MMSI_TOPIC QID: 0 Diff: -900

7.磁盘空间不足,commitlog

1)警告信息 CommitLog.java

2015-04-25 22:57:54 INFO StoreScheduledThread1 - physic disk maybe full soon, so reclaim space, 0.8434144530368926

2015-04-25 22:57:54 INFO StoreScheduledThread1 - begin to delete before 48 hours file. timeup: false spacefull: true manualDeleteFileSeveralTimes: 0 cleanAtOnce: false

2015-04-25 22:57:54 WARN StoreScheduledThread1 - disk space will be full soon, but delete file failed.

2015-04-25 22:57:55 INFO StoreScheduledThread1 - logics disk maybe full soon, so reclaim space, 0.8434167783461006

2015-04-25 22:57:55 INFO StoreScheduledThread1 - begin to delete before 48 hours file. timeup: false spacefull: true manualDeleteFileSeveralTimes: 0 cleanAtOnce: false

2015-04-25 22:57:55 WARN StoreScheduledThread1 - disk space will be full soon, but delete file failed.

2)/**

     * 清理逻辑文件服务

     */

class CleanConsumeQueueService

/**

     * 清理物理文件服务

     */

class CleanCommitLogService

// 磁盘空间警戒水位,超过,则停止接收新消息(出于保护自身目的)

        private final double DiskSpaceWarningLevelRatio = Double.parseDouble(System.getProperty(

            "rocketmq.broker.diskSpaceWarningLevelRatio", "0.90"));

3) df -hl /app

df -hl /root

4) du -hl /app

du -hl /root

转载于:https://www.cnblogs.com/zno2/p/4555056.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统开发基础:UML相关知识笔记

1、UML概念统一建模语言&#xff08;Unified Modeling Language UML&#xff09;是面向对象软件的标准建模语言。由于简单、统一&#xff0c;又能够表达软件设计中的动态和静态信息。目前UML已经成为可视化建模语言的工业标准。2、UML的组成UML三要素&#xff1a;构造块、规则、…

java中什么是运行异常_在java中最常用的运行时异常是什么?

我从不会抛出NullPointerException。对我来说&#xff0c;它是一个出现在代码中当出现问题时&#xff0c;需要开发人员看看会发生什么。然后(s)他固定的原因&#xff0c;它不会再次发生。我使用IllegalStateException表示对象配置不正确或调用的顺序不正确。但是&#xff0c;我…

迭代器 java_面试必备(含答案):30 个 Java 高频面试问题

Java集合框架为Java编程语言的基础&#xff0c;也是Java面试中很重要的一个知识点。这里&#xff0c;我列出了一些关于Java集合的重要问题和答案。1.Java集合框架是什么&#xff1f;说出一些集合框架的优点&#xff1f;每种编程语言中都有集合&#xff0c;最初的Java版本包含几…

硬件基础:台式电脑上的常用的几个接口!

今天给大家详细讲解台式电脑上的常用的几个接口&#xff01;1、I/O接口部分下图所有的接口&#xff0c;也是我们机箱后面的接口&#xff0c;统称为&#xff1a;I/O接口。2、键鼠PS/2PS/2接口是I/O接口中比较常见的一种接口&#xff0c;用来连接键盘和鼠标&#xff0c;二者可以用…

CSS-DOM介绍

三位一体的网页: 我们在浏览器里看到的网页其实是由以下三层信息构成的一个共同体: 1、结构层: 结构层是由HTML和XHTML之类的标记语言所构成的。所就是哪些出现在html标签里面的单词,对网页内容的语义含义作出了如下描述&#xff0c;例如&#xff0c;<p>This is a paragr…

java 开发注意项_JAVA开发注意事项集锦

本篇博客用于持续记录开发过程中的常用的需要注意的事项&#xff0c;都是严重的生产问题大家总结出来的、记得持续更新喔。一&#xff0c;不要以时间戳作为唯一健时间戳精确到ms级别&#xff0c;并不能作为唯一入口参数&#xff0c;数据库更新唯一查询参数&#xff0c;唯一健需…

系统开发基础:UML中图的相关知识笔记(上)

1、图的概念图(Diagram) 是一组元素的图形表示&#xff0c;大多数情况下&#xff0c;把图画成顶点&#xff08;代表事物&#xff09;和弧(表示关系)的连通图。2、UML中图的分类UML2.0中的图主要有&#xff1a;类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部…

python循环顶帖_设计Python数据库连接池1-对象的循环引用问题

在Python中如果对象定义了__del__方法的话&#xff0c;在对象的引用记数为0时会自动调用__del__方法(很象c中的析构函数)&#xff0c;但如果A对象引用B对象&#xff0c;B对象又引用A对象&#xff0c;就形成循环引用&#xff0c;此时A&#xff0c;B对象引用次数都为1。python就无…

编译时类型 和运行时类型的 区别(1)

class T{ void f(int x){ System.out.println("int in T:" x); } void f(double x){ System.out.println("double in T:"x); } void f(Object x){ System.out.println("Object in T:" x); }} class S extends T{ void f(int x){  //子类覆盖基…

系统开发基础:UML中图的相关知识笔记(下)

1、状态图状态图展现了一个状态机&#xff0c;它由状态、转换、事件、活动组成。状态图关注系统的动态视图&#xff0c;它对于接口、类、协作的行为建模尤为重要&#xff0c;它强调对象行为的事件顺序。组成&#xff1a;简单状态、组合状态、转换&#xff08;事件和动作&#x…

java京东左侧固定层_京东首页右侧固定层

需求说明制作京东首页右侧的固定层&#xff0c;6个图标&#xff1a;京东会员、购物车、我的关注、我的足迹、我的消息和咨询JIMI默认状态下仅显示图标&#xff0c;背景颜色为深灰色&#xff1b;当鼠标移至图标上时&#xff0c;背景颜色为深红色&#xff0c;并且显示文本css*{ma…

云开发技术应用python_云开发技术应用(Python)

本书共14章&#xff0c;从Python语言的语法特性开始&#xff0c;介绍了Python的安装和配置、数据类型及表达式、流程控制、序列和字典、文件处理、函数等&#xff0c;由浅入深&#xff0c;循序渐进&#xff0c;逐步引入高级话题&#xff0c;包括面向对象编程、模块和包、异常处…

记录下Linux难记实用的命令

1 看文件大小&#xff1a;du -sm * | sort -n 2 合并多个文件&#xff0c;可以跨文件夹合并&#xff1a;cat *_.txt >> news.txt 3 给文件改编码&#xff1a;iconv -f GBK -t UTF-8 原文件名 -o 新文件名 4 查找文件内容&#xff1a;grep "thermcontact" */*.i…

系统设计基础:系统设计基本任务相关知识

1、系统设计的目的提前为系统指定蓝图&#xff0c;在各种技术和实施方法中进行权衡&#xff0c;精心设计&#xff0c;合理利用各种资源、最终确定新系统的详细设计方案。2、系统设计的内容系统设计的内容主要包括系统总体结构设计、代码设计、输出设计、输入设计、处理过程设计…

java7 3dm下载_3DM游戏运行库合集安装包v2.8

游戏运行库大全 游戏运行环境 所有游戏组件 32位 64位系统常用运行库合集 3DM游戏常用运行库安装包 下载 幸姨作品本安装包集成32位和64位运行库&#xff0c;是目前互联网上最新最全的常用运行库合集&#xff0c;能自动识别系统版本以提供适合您的组件&#xff0c;无人值守自动…

uci数据集_干货收藏!三大领域常用十大开源数据集

全文共1144字&#xff0c;预计学习时长2分钟机器学习的研究与实现离不开大数据。知晓通用的开源数据集&#xff0c;一方面可以验证自己算法&#xff0c;另一方面也可以与其他算法进行比较。本文介绍了计算机视觉、自然语言处理和语音识别三大领域的十个开源数据集以供你参考&am…

系统设计知识:系统设计的基本原理介绍

1、抽象抽象主要用来将复杂的现象简化到可以分析、实验或者可以理解的程度。抽象的最低层就是实现该软件的源程序代码。在进行模块化设计也可以有多个抽象层次&#xff0c;最高抽象层次的模块用概括的方式描述问题的解决方案。较低层次的模块是对更高抽象层次模块对问题描述的细…