开发学院

您的位置:首页>教程>正文

教程正文

RocketMQ 常见问题

  以下是关于RocketMQ项目的常见问题。

通用

1 .为什么我们要创建RocketMQ项目而不是选择其他产品?

  请参阅教程第一节

2 .我必须安装其他软件,比如zookeeper,才能使用RocketMQ吗?

  不。RocketMQ可以独立运行。

使用问题

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

  如果topic在三天内发送了一条消息,那么消费者开始使用保存在服务器中的第一条消息中的消息。

  如果topic在三天前发送了一条消息,消费者开始使用服务器中最新消息的消息,换句话说,从消息队列的尾部开始。

  如果消费者重新启动,那么它开始消费来自最后消费位置的消息。

2 .消费失败时如何重新总结信息?

  群集消费模式消费者业务逻辑代码返回Action。再次消费之后,NULL或抛出异常,如果消息未能被消费,它将重试最多16次,此后,消息将被删除。

  广播消费模式广播消费仍然确保消息至少消费一次,但不提供重新发送选项。

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

  使用按时间的topic查询,您可以在一段时间内查询消息。

  使用topic和Message Id准确查询消息。

  使用topic和Message Key可以准确查询一类具有相同消息键的消息。

4 .消息是否准确传递了一次?

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

5 .如何添加新的broker?

  启动一个新的broker并将其注册到相同的名称服务器列表中。

  默认情况下,仅自动创建内部系统主题和使用者组。如果您希望在新节点上有您的业务主题和消费群体,请从现有broker复制它们。提供了管理工具和命令行来处理这个问题。

配置相关

  以下答案都是默认值,可以通过配置进行修改。

1 .消息在服务器上保存多长时间?

  存储的消息将最多保存3天,超过3天未使用的消息将被删除。

2 .消息正文的大小限制是多少?

  通常为256 KB。

3 .如何设置使用者线程的数量?

  启动Consumer时,设置ConsumeThreadNums属性,示例如下:

  consumer.setConsumeThreadMin(20);

  consumer.setConsumeThreadMax(20);

错误处理

1 .如果启动生产者或消费者失败,错误信息是生产者组或消费者重复?

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

  解决方案:确保对应于一个生产者/消费者组的JVM仅从一个生产者/消费者实例开始。

2 .如果消费者无法在广播模式下开始加载json文件?

  原因: Fastjson版本太低,不允许广播用户加载本地offsets.json,导致用户启动失败。损坏的fastjson文件也会导致同样的问题。

  解决方案: Fastjson版本必须升级到rocketmq客户端相关版本,以确保本地偏移量可以加载。默认情况下,offsets.json文件位于/home/{user}/.rocketmq_offsets。或者检查fastjson的完整性。

3 .broker崩溃的影响是什么?

Master崩溃

  消息无法再发送到此代理集,但是如果您有另一个可用的代理集,在主题存在的情况下,仍然可以发送消息。消息仍然可以从从属设备中使用。

部分slave崩溃

  只要有一个工作的slave,发送消息就不会受到影响。除了当消费者组被设置为从这个从属设备消费时,对消费消息也没有影响。默认情况下,消费群体从master消费。

所有 slave都崩溃了

  将消息发送给master服务器不会有影响,但是,如果主服务器是SYNC_MASTER,生产者将会得到一个SLAVE_NOT_AVAILABLE,指示消息不会发送给任何slave服务器。对消费消息也不会有影响,除非消费者组被设置为优选地从slave消费。默认情况下,消费群体从master消费。

4 .Producer提示“No Topic Route Info”,如何诊断?

  当您试图将消息发送到producer无法获得路由信息时,就会发生这种情况。

  确保生产者可以连接到名称服务器,并且能够从中获取路由信息。

  确保名称服务器包含主题的路由信息。您可以使用管理工具或web控制台从名称服务器通过topicRoute查询路由元信息。

  确保你的brokers将心跳发送到生产者连接的同一名称服务器列表。

  确保主topic的权限是6(rw-),或者至少是2(-w-)。

  如果找不到此topic,请通过管理工具命令UpdateTexture或web控制台在代理上创建它。