MQ解耦了生产者和消费者,前提是有一个稳定强大的消息服务,我们只管与之通信即可。
所以,和MqServer通信是什么样的?难否?
0. 发送端demo
只需要设置下 nameServer, 就可以实现发送mq消息了。简单易用,是好产品的必备特征。
具体实现过程,且让我们深入一点了解。
1:消息发送主流程
网络请求通信细节,视情况查看。
2. 更新发送路由信息
从nameserver获取原始信息,然后缓存到本地。可以保证拿到准确数据的同时,保证了高性能。
3. 选择一个队列,客户端负载均衡
基本就是一个轮询策略了。
4. 查找 broker
在一组 broker 主从中,只选择主节点进行发送消息。
总结一下发送过程:
1. 数据检验,topic格式,消息体大小等;
2. 查找queueId, 使用一定的负载均衡测试;
3. 查找 broker, 发送消息;
4. 等待响应或者重试;
5. 所有topic,route信息都可以namesrv获取;
5. producer 的启动环境准备
以上的过程式,是进行发发送消息的过程,最终都是基于 netty 创建的通道进行传送的,那么这些通道都是什么时候准备好的呢?其实是 producer.start();
MQClientManager 是个重要的类,它包含了客户端和nameserver,broker连接的建立,维护线程的创建等等。
启动时主要完成的任务有:准备好网络连接的环境基于netty, 创建生产者消费者线程池,开启各后台任务异步线程。然后可以准备发送消息。
以上,这可能是水军。自己领悟才是硬道理。