1. topic、tag、key的区别?topic是消息的一级分类,tag相当于是消息的二级分类,key一般用于消息在业务层面的唯一标识。对发送的消息设置好 Key,以后可以根据这个 Key 来查找消息。
  2. 关于consumerGroup:一个consumerGroup下可以有多个消费者,但是必须订阅相同的topic和tag,否则后启动的消费者会覆盖前面消费者订阅的topic和tag。
  3. 消息有2种消费方式,被动监听或主动拉取。DefaultMQPushConsumer类提供了被动监听方式的实现,当订阅的topic有消息时会自动调用注册好的MessageListener消费消息。DefaultLitePullConsumer类提供了主动拉取方式的实现,setPullBatchSize()方法设置一次拉取的消息数量,poll()方法拉取消息。
  4. 顺序消费:可以实现全局有序和队列有序。全局有序只能有一个消息队列,和单个消费者,极大的影响性能。队列有序仅保证一个队列内部的消息顺序消费,跨队列不能保证严格的顺序消费。发消息时实现MessageQueueSelector接口,可以选择该条消息使用的消息队列,消费消息时,使用MessageListenerOrderly,通过加分布式锁和本地锁保证同时只有一条线程去消费一个队列上的数据,从而实现有序消费。
  5. 实际上,每一个消费者的消费端都是采用线程池实现多线程消费的模式,即消费端是多线程消费。虽然MessageListenerOrderly被称为有序消费模式,但是仍然是使用线程池去消费消息。MessageListenerConcurrently是拉取到新消息之后就提交到线程池去消费,而MessageListenerOrderly则是通过加分布式锁和本地锁保证同时只有一条线程去消费一个队列上的数据。
  6. 修改nameserver内存大小:
#调整nameserver启动的内存(如果服务器内存比较大,可以不调整),如果内存较小,不调整此文件,可能导致无法启动
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
  1. 修改broker内存大小:
#调整nameserver启动的内存(如果服务器内存比较大,可以不调整),如果内存较小,不调整此文件,可能导致无法启动
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx512m -Xmn256m"