下面的问题经常是关于一般的rocketmq项目要求。
一般
-
为什么我们创造而不是选择其他产品rocketmq项目吗?
请参阅 Why RocketMQ
我是否需要安装其他softewares,如管理员,使用rocketmq?
不,rocketmq可以独立运行。
使用
-
新创建的消费者ID在哪里开始消费消息?
- 如果主题在三天内发送消息,则消费者开始从服务器中保存的第一条消息中消费消息。
- 如果主题在三天前发送消息,那么消费者开始从服务器中的最新消息开始消费消息,换句话说,从消息队列的尾部开始。
- 如果这样的消费者重新启动,那么它将开始从上一个消费位置消费消息。
-
当消费失败如何重新消费消息?
- 集群消费模式下,消费者业务逻辑代码返回Action.ReconsumerLater, NULL,或抛出一个异常,如果消息消费失败,它将重试最多16次,然后,这条信息将被丢弃。
- 广播的消费模式下,广播消费仍然可以确保消息至少被消费一次,但没有提供重新发送的选项。
-
如果消费失败,如何查询失败的消息?
- 按时间使用Topic查询,您可以查询一段时间内的消息。
- 使用Topic和Message Id准确地查询消息。
- 使用Topic和Message Key准确地查询具有相同Message Key的一类消息。
-
消息是否准确地投递一次?
RocketMQ确保所有消息至少投递一次。在大多数情况下,消息不会重复投递。
-
如何添加新的broker?
- 启动一个新的broker,并将其注册到同一个名称服务器列表中。
- 默认情况下,只自动创建内部系统主题和消费者组。如果希望在新节点上拥有业务主题和消费组,请从现有broker复制它们。提供管理工具和命令行来处理这个问题。
相关的配置
下面的答案都是默认值,可以通过配置进行修改。
- 服务器上保存的消息有多长?
存储的消息将被保存长达3天,超过3天未被消费的消息将被删除。
消息体的大小限制是多少?
一般256kb。-
如何设置消费者线程的数量?
当你启动消费者,设置ConsumeThreadNums
属性的示例如下:consumer.setConsumeThreadMin(20); consumer.setConsumeThreadMax(20);
错误
-
如果您启动生产者或消费者失败,错误消息是生产者组或消费者重复?
原因:使用相同的生产者/消费者组在同一JVM中启动多个生产者/消费者实例可能导致客户机启动失败。
解决方案:确保与一个生产者/消费者组相对应的JVM仅启动一个生产者/消费者实例。 -
如果消费者无法在广播模式下加载JSON文件?
原因:广播消费者使用低版本的Fastjson加载本地offsets.json,造成消费者启动失败。fastjson文件损坏也会导致同样的问题。
解决方案:为了确保本地offsets.json可以被加载,Fastjson版本必须升级到rocketmq依赖的版本。默认情况下offsets.json文件在/home/{user}/.rocketmq_offsets
。或检查fastjson的完整。 -
broker 崩溃的影响是什么?
- 主机崩溃
消息不能再发送到这个broker群,但是如果您有另一个broker群可用,仍然可以发送消息,因为该主题已经存在。消息仍然可以从slave身上被消耗掉。
- 一些slave崩溃
只要有另一个工作的slave,就不会对发送消息产生影响。对消费消息也不会有影响,除非消费者组被设置为最好(preferably)从这个用户消费。默认情况下,消费者组从master消费。
- 所有的slave都崩溃
发送消息给master不会有任何影响,但是,如果master是
SYNC_MASTER
,生产者将获得SLAVE_NOT_AVAILABLE
表明消息不发送任何slaves。对消费消息也不会有影响,除非消费者组被设置为最好从slave消费。默认情况下,消费者组从master消费。 -
生产者报错“No Topic Route Info”,如何诊断?
当您试图将消息发送到路由信息不可用的生产者,就会发生这种情况。
- 确保生产者可以连接到名称服务器,并能够从中获取路由元数据。
- 确保名称服务器确实包含主题的路由元信息。您可以使用管理工具或web控制台,通过topicRoute从名称服务器查询路由元信息。
- 确保您的brokers将心跳发送到您的生产者正在连接的同名服务器列表。
- 确保主题的权限是6(rw-),或至少2(-w-)
如果您无法找到topic,请通过管理工具命令updatetTopic
或web控制台在broker上创建它。