图1
rocket mq 的作用:消峰,异步,解耦。
producer 集群生产者相当于我们的订单服务集群,consumer集群服务消费集群相当于统计服务,每消费一个订单,服务加1;
broker 消息中间件的,中转消息存储消息的。name Servcer 就是去维护整个集群的状态,高可用的。很想dubbo里的注册中心zookeeper。
图2
对于rocketmq来说,生产者和消费者都是客户端。自己是服务端。但是对于生产者消费者来说,自己是服务端,rocketmq是客户端。
rocketmq-remoting 代码里包含了生产者与mq之间的远程之间的调用,rocketmq-common 代码里包含了一些消息相关的信息
其实从宏观来看就是一个,远程通讯,发送消息,储存消息的一个过程。
图3
启动服务。
图4
统计页面。
图5
图6
状态
图7
状态;
路由 权限,6代表有所有的权限。相当于root
consumer。
图8
图9
图10
图11
启动测试。 默认一个topic 有4个队列。
图12
图13
broker 包含一个topioc。一个topioc包含多个queue
图14
33行,35行,37行都是准备工作(不重要)。
44行,45行拼接数据。 51行send方法是核心;
图15
默认支持4兆;
图16
图17
154行注册到nameService
图18
图19
图20
447行。尝试去获取
生产者从nameServer 中获取broker的地址信息,与broker建立连接,发送信息。457行从broker中的四个队列中选取一个队列来接受数据图23。
463行发送数据返回的结果;
图21
图22
605行远程调用,获取数据;
620行加入缓存。
图23
通过63行这样一个函数来选的。简单的说轮询的方式
图24
组装消息协议;
根据不同的方式进行发送消息。696行发送消息;
图25
发送整体流程;
图26
图27
开源的只支持这种固定的长度。
图28
如果设置为3就是 10s; 原理和普通消息的原理是一样的。 场景如果发送到第三方的机器挂了,短时间不能恢复的情况下,适合使用这种场景;
图29
示例: