liuyulin
发布于 2024-02-02 / 28 阅读
0
0

RocketMQ

RocketMQ

NameServer

NameServer是一个Broker与Topic路由的注册中心,支持Broker的动态注册与发现。主要包括两个功能:

  • Broker管理:接受Broker集群的注册信息并且保存下来作为路由信息的基本数据;提供心跳检测机制,检查Broker是否还存活。

  • 路由信息管理:每个NameServer中都保存着Broker集群的整个路由信息和用于客户端查询的队列信息,Producer和Consumer通过NameServer可以获取整个Broker集群的路由信息,从而进行消息的投递和消费。

启动RocketMQ

切换到rocketmq目录

cd /home/lyl/rocketmq-5.1.0/

启动NameServer

### 启动namesrv
nohup sh bin/mqnamesrv &
 
### 验证namesrv是否启动成功
tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...

启动失败请参考遇到的问题章节

启动Broker+Proxy

### 先启动broker
nohup sh bin/mqbroker -n localhost:9876 &

### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-a
tail -f ~/logs/rocketmqlogs/proxy.log 
The broker[broker-a,192.169.1.2:10911] boot success...

工具测试消息收发

export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
 SendResult [sendStatus=SEND_OK, msgId= ...

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
 ConsumeMessageThread_%d Receive New Messages: [MessageExt...

RockMQ控制台

从github中下载rocketmq-externals,解压。

项目是sprintboot工程,进入配置文件目录,修改配置文件,修改项目端口号,增加namesrv地址

在pom文件中增加JAXB依赖(用于XML绑定Java的技术,可以根据XML Schema生成Java类的技术)

<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
        <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>2.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl -->
        <dependency>
                <groupId>com.sun.xml.bind</groupId>
                 <artifactId>jaxb-impl</artifactId>
                 <version>2.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core -->
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

SDK测试消息收发

引入Maven依赖

<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client-java -->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client-java</artifactId>
    <version>5.0.4</version>
</dependency>

通过mqadmin创建topic

$ sh bin/mqadmin updatetopic -n localhost:9876 -t Logtopic -c DefaultCluster

订阅关系一致

订阅关系是RocketMQ领域模型中非常重要的环节,用于表达消费者消费信息的控制元数据。订阅关系一般是指,同一个消费者组下的所有消费者实例所订阅的Topic、Tag必须完全一致,如果订阅关系不一致,会导致消费信息紊乱,甚至消息丢失。

遇到的问题

问题一

正常启动NameServer报错 ignoring input and appending output to ‘nohup.out’

解决方式:

创建日志目录

/logs/mqnamesrv.log /logs/mqbroker.log

之后运行

nohup sh bin/mqnamesrv > logs/mqnamesrv.log 2>&1 &
nohup sh bin/mqbroker -n localhost:9876 --enable-proxy > logs/mqbroker.log 2>&1 &

问题二

未检测到jps命令

解决方法

yum remove java*
yum install java-1.8.0-openjdk-devel.x86_64

问题三

启动NameServer报内存不足

解决方法

修改bin/runbroker.sh、runserver.sh、tools.sh中的默认内存大小

具体参考Centos7.6安装RocketMQ4.9.2并配置

问题四

启动Broker的时候 提示绑定8080端口失败

解决办法

管他是谁在占用 直接 kill -9

问题五

在使用rocketmq-console的时候,pom中有两个插件导入不进去

解决办法

添加依赖之后再更新pom

问题六

使用rocketmq-console打包失败,提示jar注入失败之类的错误

解决办法

检查一下java版本,rocketmq-console默认使用的是JDK1.7,改成1.8,将使用的JDK统一改为1.8


评论