RocketMQ 的 Broker 如何处理拉取请求的?
面试宝典
2023-06-12
Web前端开发工程师
82
当一个消费者端发起拉取消息请求时,Broker 会先判断该消费者是否具有消费该消息队列的权限,如果有,则会从待拉取队列中取出对应的消息进行处理,否则会返回权限不足的错误提示。对于拉取请求的处理,Broker 会根据请求中传递的参数,比如拉取起始位置、最大消息数等,从消息存储文件中读取对应的消息数据,并将消息数据打包成响应返回给消费者。同时,Broker 会根据消费者的消费进度信息,更新存储在 Broker 中的消费者消费进度,以便下一次拉取消息时能正确地读取到消息。为了提高性能和降低网络带宽的压力,Broker 还会对拉取请求进行优化,比如支持批量拉取消息等。
-
上一篇
RocketMQ 的 Broker 如何处理拉取请求的?
<p>Consumer 首次请求 Broker,Broker 中是否有符合条件的消息:</p><p>1.如果有</p><ul><li>响应 Consumer。</li><li>等待下次 Consumer 的请求。</li></ul><p><br></p><p>2.如果没有</p><ul><li>DefaultMessageStore#ReputMessageService#run 方法。</li><li>PullRequestHoldService 来 Hold 连接,每个 5s 执行一次检查 pullRequestTable 有没有消息,有的话立即推送。</li><li>每隔 1ms 检查 commitLog 中是否有新消息,有的话写入到 pullRequestTable。</li><li>当有新消息的时候返回请求。</li><li>挂起 consumer 的请求,即不断开连接,也不返回数据。</li><li>使用 consumer 的 offset。</li></ul>
-
下一篇
RocketMQ 的 Broker 如何处理拉取请求的?
RocketMQ 的 Broker 如何处理拉取请求的?
相关文章
- PHP中如何处理文件上传和下载?
- 如何在Golang中实现单例模式?
- 请解释下PHP中会话(session)和Cookie(cookie)的作用。
- 请谈谈您对PHP的垃圾回收机制的了解及实践。
- 请列出与PHP相关的缓存机制及其优缺点。
- 请解释什么是defer语句,以及它有什么作用?
- 请举例说明PHP中如何处理异常?
- 如何通过PHP来保护您的代码免受SQL注入攻击?
- 如何在Golang中进行并发编程?
- 在PHP中,Magic Method都有哪些,并举例说明它们的作用?
- 请描述在Golang中使用MongoDB时的最佳实践。
- 聊一下高并发和高性能的区别和联系?
- 请给一个例子解释一下PHP中的闭包函数是什么?
- PHP7和PHP5的性能上有什么差别?
- PHP中如何进行单元测试以及如何在开发过程中保证代码质量?
- PHP中常用的设计模式有哪些?
- 请提供至少三个通过PHP实现的网站性能优化技巧。
- 请解释一下PHP中的MVC模式是如何工作的?
- 请解释HTTP的基本概念,以及在Golang中如何使用HTTP?
- 请问PHP中如何实现多线程?
微信收款码
支付宝收款码