概况

1. 我是否需要安装其他软件,如ZooKeeper,才能使用RocketMQ?

不,RocketMQ可以独立运行。

用法

1. 新创建的消费者ID从哪里开始消费消息?

  1. 如果主题在三天内发送了一条消息,那么消费者将从第一条消息保存到服务器后,就开始消费消息。
  2. 如果主题在三天前发送了一条消息,那么消费者将开始消费服务器中的最新消息,换句话说,从消息队列的尾部开始。
  3. 如果重启此类消费者,则它将从上次消费的位置开始消费消息。

2. 当消费失败时,如何重新尝试消费消息?

  1. 集群消费模式中,消费业务逻辑代码返回Action.ReconsumerLater、NULL或抛出异常,如果一条消息消费失败,它将重试多达16次,之后,该消息将被除名。
  2. 广播消费模式中,广播消费确保消息至少消费一次,但不提供重新发送选项。

3. 如果消费失败,如何查询失败的消息?

  1. 使用按时间查询的主题时,您可以在一段时间内查询消息。
  2. 使用主题和消息ID,可以准确地查询消息。
  3. 使用主题和消息Key,可以准确地查询具有相同消息键的一类消息。

4. 消息是否只传递一次?

RocketMQ 确保所有消息至少传递一次。在大多数情况下,消息不会重复。

5. 如何添加新的broker?

  1. 启动一个新的broker,并将其注册到相同的name server列表中。
  2. 默认情况下,只自动创建内部系统主题和消费者组。如果您希望将您的业务主题和消费者组放在新的broker上,请将他们放置到现有的broker中。RocketMQ提供了管理工具和命令行来处理这个问题。

配置相关

下面的问题答案都是相关配置的默认值,您可以视情况修改这些值。

1. 消息在服务器中保存多久?

默认保存3天,3天后将删除。

2. 消息主题的大小限制是多少?

一般情况下,256KB.

3. 怎么设置消费者线程的数量?

当您启动消费者实例时,设置一个ConsumeThreadNums属性,示例如下:

consumer.setConsumeThreadMin(20);
consumer.setConsumeThreadMax(20);

错误排查

1. 启动生产者或消费者失败,而且错误消息是producer group or consumer repeat。

原因:在同一个JVM中,使用同一个生产者/消费者组,来启动生产者/消费者的多个实例,可能会导致实例无法启动。

解决方案:确保一个JVM中,一个生产者/消费者组,只对应一个生产者/消费者实例。

2. 消费者在广播模式下,开始加载JSON文件失败

原因:fastjson版本太低,不允许广播使用者加载local offsets.json,。损坏的fastjson文件也可能导致相同的问题。

解决方案:Fastjson 版本必须升级到RocketMQ对应的依赖版本,以确保可以加载本地的offsets.json。默认情况下offsets.json文件位于/home/{user}/.rocketmq_offsets中。或者检查fastjson的完整性。

3. broker崩溃有什么影响?

1. Master崩溃

消息仍然可以从slaves服务器中消费,但消息将不再发送到这个broker集。如果您有其它可用的broker集,则仍然可以使用存在的主题发送消息。

2. 部分slave崩溃

只要有另一个正常的slave,就不会影响发送消息。默认情况下,消费者组从master消费消息。除非消费者组被明确地设置在这个slave消费,否则不会影响消费消息。

3.所有slaves崩溃

对向master服务器发送消息没有影响,但是,如果master服务器是SYNC_MASTER,生产者将得到一个SLAVE_NOT_AVAILABLE,表明消息没有发送给任何从服务器。默认情况下,消费者组从master消费消息。除非消费者组被明确地设置在slaves消费,否则不会影响消费消息。

4. 生产者报错 “No Topic Route Info”, 如何排查?

 

当您试图将消息发送到,其路由信息对生产者不可用的主题时,就会发生这种情况。

  1. 确保生产者可以连接到名称服务器,并且能够从中获取路由元信息。
  2. 确保名称服务器确实包含主题的路由元信息。您可以使用管理工具或Web控制台,通过topicRoute从name server查询路由元信息。
  3. 确保您的brokers将心跳发送到,生产者连接的namer server列表。
  4. 确保主题的权限是6(rw-)或至少2(-w-)。

如果找不到此主题,请通过管理工具命令updateTopic 或Web控制台,在broker上创建它。