生产者是怎么发消息的?
MessageQueue
首先在理解生产者发消息之前,必须要明白一个概念:MessageQueue是什么?
其实MessageQueue是RocketMq的一种数据分片+物理存储机制。
我们一般在创建 Topic 的时候会指定 MessageQueue 的数量。
如上图,一个 Topic 中有4个 MessageQueue,每个 Brokers 上有2个 MessageQueue ,生产者通过算法(默认是均匀分配)来把消息写入不同的 MessageQueue 中。MessageQueue 的数据可以持久化在磁盘上。
这样就把消息分散到了多个 Broker 上,大大提升 Broker 的抗并发能力!
Producer连接NameSever
Producer 通过 NameSever 获取指定 Topic 的 Broker 路由信息,并在本地保存一份缓存数据,比如一个Topic有哪些 MessageQueue,MessageQueue 在哪几台 Broker 上,Broker 的ip.port等等。
Producer 发送消息只发到 Master Broker上,Slave 通过 主从同步获取数据。
那么 Produce 是怎么链接 NameSever 的呢?
连接
单个生产者者和一台 Nameserver 保持长连接,定时查询t