论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
关于使用RocketMQ搭建多Master多Slave模式(同步)集群 ...
关于使用RocketMQ搭建多Master多Slave模式(同步)集群时遇到的问题 ...
用多少眼泪才能让你相信
金牌会员
|
2023-7-24 02:58:46
|
显示全部楼层
|
阅读模式
楼主
主题
860
|
帖子
860
|
积分
2582
搭建多Master多Slave模式(同步)集群时的java.lang.NullPointerException异常
一、运行环境等基本描述(问题产生原因是权限问题,即权限不够导致无法启动broker,甚至broker线程无法通过jps命令查出。下面阐述分析思路)
1.1)操作系统:Linux
虚拟机:VMware Workstation 16 Pro 、WSL
Openjdk Version:11.0.19
使用RocketMQ进行多Master多Slave模式(同步)集群的搭建
2)集群配置:
# nameserver
xxx.xxx.xxx.xxx rocketmq-nameserver1
xxx.xxx.xxx.xxx rocketmq-nameserver2
# broker
# 在VMware Workstation上启动
xxx.xxx.xxx.xxx:10911 rocketmq-master1--> broker-a.properties
xxx.xxx.xxx.xxx:11011 rocketmq-slave2 --> broker-b-s.properties
# 在WSL上启动
xxx.xxx.xxx.xxx:10911 rocketmq-master2 --> broker-b.properties
xxx.xxx.xxx.xxx:11011 rocketmq-slave1 --> broker-a-s.properties
二、问题复现(在VMware Workstation上启动broker-a)
1.1)用户sumuwen并不是root用户,因此没有拥有至高权限
输入以上命令后,broker启动过程中抛出异常java.lang.NullPointerException
三、分析并解决问题
1.1)检查线程ID:使用jps命令检查目前正在运行的线程ID,发现broker并未启动
2)检查网络状态:使用netstat -tlnp命令检查网络状态,并未发现端口为10911的进程出现在网络状态中,说明broker并未被真正的启动。这一点也可以在broker.log或者在nohup命令生成的nohup.out文件中查询出来。其实,在这里linux就已经提示你了,因为不是root用户,所以目前用户的权限不足以查询出所有的信息。这一点其实也体现在了使用jps命令时,可能你已经启动了broker,但是jps命令就是查询不出来。这也是为什么我会进行检查线程ID和检查网络状态这两个操作的原因,目的就在确定broker是否已经启动。
3)使用sudo进行broker的启动(每次启动一个broker利用上面的方法检查broker是否启动成功是一个非常有效率而且能够定位到启动的错误是什么的好习惯。当然,你也可以选择切换到root用户使用jps命令查询broker是否启动成功)。在此之前,需要注意一件事情,第一次使用sudo命令时需要输入密码,建议在输入密码后再使用sudo命令启动broker。
注:nohup命令会在执行后在你目前终端所处的文件位置生成一个nohup.out文件,里面记录了一些关于你执行命令的状态信息。在启动broker的过程中除非你设置了环境变量,否则需要时刻注意你的终端中所处的文件位置,因为如果文件位置不对,你也无法在任何文件地点启动broker。启动broker的文件位置一般是rocketmq的bin目录下。
4)切换到root用户,我们发现broker-a被成功启动。这里如果你不是root用户使用jps的话,你是查询不出来broker成功启动的进程ID的。但是你可以使用(在使用非root用户时)命令netstat -tlnp命令,可以发现端口号10911已被使用(只不过无法确定是否是broker-a使用的,这时候去看broker.log以及nohup.out文件进行进一步的判断就十分重要了)
2.1)使用WSL的同志们会发现,不需要sudo,不需要切换root用户,直接使用broker启动命令,然后用jps命令进行线程ID的查询,broker就成功启动了!这是因为WSL的用户,在一开始就是root,即权限最高。因此,上述问题也就不复存在了。
2)上述仅仅是启动了集群中的broker-a,在VMware Workstation上还要启动broker-b-s,步骤分析基本一样,就不过多赘述了。
3)以上问题分析流程以及解决方式是启动broker时出现java.lang.NullPointerException异常的一种解决思路的提供。
4)希望你能以最短的时间解决你的问题。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
用多少眼泪才能让你相信
金牌会员
这个人很懒什么都没写!
楼主热帖
安卓期末大作业——单词本APP(源码+任 ...
【Java开源数据库语言】基于SPL如何提 ...
杭州联合银行 x 袋鼠云:打造智能标签 ...
iNeuOS工业互联网操作系统,增加搜索应 ...
vue3+Element采用递归调用封装导航栏 ...
个人博客系统(附源码)
真正在大厂干了几年,我学会了反内卷[ ...
ssrf实战
攻防世界 new_easypwn 题解
内网安全 - 简单域环境搭建
标签云
挺好的
服务器
快速回复
返回顶部
返回列表