1.生产消息分为: 同步,异步,单向发送。 建议使用异步回调的方式,注意这里的retryTimesWhenSendFailed是指生产者连接到broker的通信失败,连接成功后,因为broker的page cache busy,导致的生产失败,rocketmq本身不会重试(可参考DefaultMQProducerImpl.sendKernelImpl查看哪些异常是重试的)。如有必要,需要程序自行重试。 生产消息broker的处理图中是简化了的,其实broker接到消息后会先放一个SendThreadPoolQueue中,然后有一个线程不断拉取追加到MappedFile中。这里还涉及到一个快速失败,即SendThreadPoolQueue.size>10000,或者消息在SendThreadPoolQueue中存放时间过长(队头元素超过200ms),则执行快速失败逻辑。
2.如果开启trasientStorePoolEnable,RocketMQ将单独创建一个MappedByteBuffer内存缓存池,用来临时存储数据,数据先写入该内存映射中,然后由commit线程定时将数据从该内存复制到与目的物理文件(commitLog)对应的内存映射(MappedFile)中。RocketMQ引入该机制主要的原因是提供一种内存锁定,将当前堆外内存一直锁定在内存中,避免被进程将内存交换到磁盘。
3.ReputMessageService轮询CommitLog将新增的消息派发到ConsumerQueue和IndexFile中。
4. DefaultMQPushConsumerImpl其