基于最新的release-4.7.1代码分析。
客户端是个单独模块
从UT看Producer API
阅读源码,不推荐从入口开始看到底,毕竟你太年轻,把握不住它的底。我们可以带着问题去研究源码:Producer是如何发消息的?
推荐从UT用例入手。通过这些小流程,debug查看关键流程即可。
RocketMQ客户端的Producer的所有测试用例都在DefaultMQProducerTest类,这就很方便我们快速了解Producer。
主要测试用例
Producer相关的UML图
-
门面模式(Facade Pattern)
给客户端提供了一个可以访问系统的接口,隐藏系统内部的复杂性。
接口MQProducer就是门面,客户端只要使用这个接口就可以访问Producer实现消息发送的相关功能,使用上不必再与其他复杂实现类打交道。
类DefaultMQProducer实现了接口MQProducer,方法实现大多没有业务逻辑,只是封装对其他实现类的方法调用,也可视为是门面。
Producer大部分业务逻辑实现都在类DefaultMQProducerImpl。
有时实现分散在很多内部类,不方便用接口来对外提供服务,就可仿照RocketMQ,使用门面模式隐藏内部实现,对外提供服务。
接口MQAdmin定义了一些元数据管理的方法,在消息发送过程会用到。