消息队列服务器安装失败,开发环境下的RocketMQ完整安装步骤、错误分析以及示例...

在看这文章之前建议先看看先前架构原理介绍文章:

RocketMQ服务器启动

linux环境

下载编译源码 # 下载$

> wget wget http://mirror.bit.edu.cn/apache/rocketmq/4.6.0/rocketmq-all-4.6.0-source- >

# 解压$

>unzip rocketmq-all-4.7.0-source-release.zip

> cd rocketmq-all-4.7.0/

# 编译$

> mvn -Prelease-all -DskipTests clean install -U

> cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0

启动 Name Server # 启动 Name Server 服务

> nohup sh bin/mqnamesrv &

# 启动完成后,查看日志$

> tail -f ~/logs/rocketmqlogs/namesrv.log

The Name Server boot success...

启动 Broker

在 conf 目录下,RocketMQ 提供了多种 Broker 的配置文件:

broker.conf :单主,异步刷盘。

2m/ :双主,异步刷盘。

2m-2s-async/ :两主两从,异步复制,异步刷盘。

2m-2s-sync/ :两主两从,同步复制,异步刷盘。

dledger/ :Dledger 集群,至少三节点 # 启动 Broker服务

> nohup sh bin/mqbroker -n localhost:9876 &

# 启动完成后,查看日志$

> tail -f ~/logs/rocketmqlogs/broker.log

The broker[%s, 172.30.30.233:10911] boot success...

其中,参数:

通过 -c 参数,配置读取的主 Broker 配置

通过 -n 参数,设置 RocketMQ Namesrv 地址

关闭服务器 > sh bin/mqshutdown broker

The mqbroker(36695) is running...

Send shutdown request to mqbroker(36695) OK

> sh bin/mqshutdown namesrv

The mqnamesrv(36664) is running...

Send shutdown request to mqnamesrv(36664

windows环境

首先去官网下载编译之后的版本,然后解压到本地目录

官网链接:http://rocketmq.apache.org/dowloading/releases/

下载目标:Binary: [rocketmq-all-4.7.0-bin-release.zip

配置ROCKETMQ_HOME到系统环境变量中,启动脚本将读取ROCKETMQ_HOME变量

分别进入bin目录下 启动如下脚本(需要设置内存参数,防止内存过大,启动失败,具体看小节):

3.1 启动namesrv

运行命令: mqnamesrv.cmd

log : The Name Server boot success. serializeType=JSON

3.2 启动brokerserver

运行命令: mqbroker.cmd -n localhost:9876

log : The broker[IQSZ-L01898, 10.111.45.111:10911] boot success. serializeType=JSON and name server is localhost:9876

关闭服务器

mqshutdown.cmd broker

log:killing name server

mqshutdown.cmd namesrv

log:killing broker

RocketMQ发送消息和消费消息

RocketMQ发送消息和消费消息,先启动消费者,然后再启动生产者

添加依赖

org.apache.rocketmq

rocketmq-client

4.3.0

发送消息

发送消息--同步

public class SyncProducer {

public static void main(String[] args) throws Exception {

//Instantiate with a producer group name.

DefaultMQProducer producer = new

DefaultMQProducer("test-group");

// Specify name server addresses.

producer.setNamesrvAddr("localhost:9876");

//Launch the instance.

producer.start();

for (int i = 0; i < 100; i++) {

//Create a message instance, specifying topic, tag and message body.

Message msg = new Message("TopicTest" /* Topic */,

"TagA" /* Tag */,

("Hello RocketMQ " +

i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */

);

//Call send message to deliver message to one of brokers.

SendResult sendResult = producer.send(msg);

System.out.printf("%s%n", sendResult);

}

//Shut down once the producer instance is not longer in use.

producer.shutdown();

}

}

发送消息--异步

public class AsyncProducer {

public static void main(String[] args) throws Exception {

//Instantiate with a producer group name.

DefaultMQProducer producer = new DefaultMQProducer("test—group");

// Specify name server addresses.

producer.setNamesrvAddr("localhost:9876");

//Launch the instance.

producer.start();

producer.setRetryTimesWhenSendAsyncFailed(0);

for (int i = 0; i < 100; i++) {

final int index = i;

//Create a message instance, specifying topic, tag and message body.

Message msg = new Message("TopicTest",

"TagA",

"OrderID188",

"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));

producer.send(msg, new SendCallback() {

@Override

public void onSuccess(SendResult sendResult) {

System.out.printf("%-10d OK %s %n", index,

sendResult.getMsgId());

}

@Override

public void onException(Throwable e) {

System.out.printf("%-10d Exception %s %n", index, e);

e.printStackTrace();

}

});

}

//Shut down once the producer instance is not longer in use.

producer.shutdown();

}

发送消息--单向

public class OnewayProducer {

public static void main(String[] args) throws Exception{

//Instantiate with a producer group name.

DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");

// Specify name server addresses.

producer.setNamesrvAddr("localhost:9876");

//Launch the instance.

producer.start();

for (int i = 0; i < 100; i++) {

//Create a message instance, specifying topic, tag and message body.

Message msg = new Message("TopicTest" /* Topic */,

"TagA" /* Tag */,

("Hello RocketMQ " +

i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */

);

//Call send message to deliver message to one of brokers.

producer.sendOneway(msg);

}

//Shut down once the producer instance is not longer in use.

producer.shutdown();

}

}

消费消息

public class Consumer {

public static void main(String[] args) throws InterruptedException, MQClientException {

// Instantiate with specified consumer group name.

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("test-group");

// Specify name server addresses.

consumer.setNamesrvAddr("localhost:9876");

// Subscribe one more more topics to consume.

consumer.subscribe("TopicTest", "*");

// Register callback to execute on arrival of messages fetched from brokers.

consumer.registerMessageListener(new MessageListenerConcurrently() {

@Override

public ConsumeConcurrentlyStatus consumeMessage(List msgs,

ConsumeConcurrentlyContext context) {

System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);

return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

}

});

//Launch the consumer instance.

consumer.start();

System.out.printf("Consumer Started.%n");

}

常出现的错误

安装中出现的错误

防止内存设置过大

修改runbroker.cmd配置文件

set "JAVA_OPT=%JAVA_OPT% -server -Xms500m -Xmx500m -Xmn500m"

set "JAVA_OPT=%JAVA_OPT% -XX:MaxDirectMemorySize=1g"

47571835b8e1edd4fae23d90c7606e20.png

修改runserver.cmd配置文件

set "JAVA_OPT=%JAVA_OPT% -server -Xms500m -Xmx500m -Xmn500m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

a6113b2c1b74b62de167939adb9ef40c.png

启动NAMESERVER报错

unrecognized vm option 'MetasoaceSize=128m'

解决方法:更换jdk版本为1.8即可

启动BROKER报错

错误: 找不到或无法加载主类 xxxxxx’

解决方法:打开runbroker.cmd(windows),然后将‘%CLASSPATH%’加上英文双引

使用过程中出现的错误

No route info of this topic

Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic

查看是否允许自动创建topic

命令:mqbroker.cmd -n localhost:9876 -p

mq开启自动创建topic参数

命令:mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true

Broker 没有正确连接到 Name Server

查看broker.log日志

位置: /安装目录/conf/logback_broker.xml中日志位置

日志信息:broker.log

日志信息:namesrv.log

Producer 没有正确连接到 Name Server

linux环境:查询防火墙是否通

错误分析方法

日志分析法:

查看broker日志

关注broker是否有注册到nameserver

register broker to name server localhost:9876 OK

关注生产者是否连接到broker

new producer connected, group: test_group channel: ClientChannelInfo ...

查看已经创建的topic是否包含自己想要的topic

2020-04-21 15:58:22 INFO main - load exist local topic, TopicConfig [topicName=test_group, readQueueNums=1, writeQueueNums=1, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false] ...

查看消费者是否连接到broker

new consumer connected, group: test_group CONSUME_PASSIVELY CLUSTERING channel: ClientChannelInfo ...

查看nameserver日志

关注broker是否注册到nameserver

new broker registered, localhost:10911

查看topic消息

2020-04-21 17:03:32 INFO RemotingExecutorThread_1 - new topic registered, test_topic QueueData [brokerName=broker-a, readQueueNums=8, writeQueueNums=8, perm=6, topicSynFlag=0]

...

各位看官还可以吗?喜欢的话,动动手指点个💗,点个关注呗!!谢谢支持!

欢迎关注,原创技术文章第一时间推出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值