最新消息递送数学模型

在前两篇该文里我曾也画过最新消息递送的数学模型图,这儿再来单纯备考呵呵:

  • 最新消息商品和服务项目软件产业从注册登记服务项目中心以获取到路由器重要信息(阻抗平衡),接着将最新消息推送给Broker软件产业
  • 注册登记服务项目中心是无状况软件产业,即每两台伺服器都不负面影响其它的伺服器。Broker会与此同时向大部份的注册登记服务项目中心伺服器里推送注册登记重要信息
  • 注册登记服务项目中心储存的是Topic、Queue、IP门牌号等重要信息,恒定情况下每台电脑储存的如果是完全相同的
  • Broker选用characterization构架提供更多服务项目,主伺服器负责管理载入操作方式,从伺服器负责管理处置读允诺

最新消息递送业务流程

最新消息推送的排程图如下表所示图右图:

Producer首先要知道向哪个Broker推送最新消息,所以具体业务流程如下表所示:

  1. Producer先从本地尝试以获取路由器重要信息
  2. 本地无缓存的路由器重要信息时,从注册登记服务项目中心中以获取路由器重要信息,并缓存到本地
  3. 以获取到的路由器重要信息包含了Topic下的大部份Queue,Producer就可以采取阻抗平衡策略把最新消息推送到某个队列里
  4. Producer推送最新消息到Broker成功之后,伺服器就会返回最新消息推送成功对象SendResult

最新消息递送方法链

下面以排程图的形式展示了从以获取路由器表到最新消息递送过程的整体方法初始化链:

上图涉及到的核心API如下表所示:

// 推送最新消息DefaultMQProducersend(Message msg);// 推送最新消息,增加超时时间DefaultMQProducersend(Message msg, long timeout);// 推送最新消息,增加推送最新消息的模式(异步/同步)DefaultMQProducersendDefaultImpl(Message msg, CommunicationMode mode, long timeout);
// 查询最新消息推送的路由器重要信息DefaultMQProducerImpltryToFindTopicPublishInfo(String topic);
// 根据topic的名称更新注册登记服务项目中心的路由器重要信息MQClientInstanceupdateTopicRouteInfoFromNameServer(String topic);// 根据topic的名称更新注册登记服务项目中心的路由器重要信息,并以获取路由器重要信息MQClientInstanceupdateTopicRouteInfoFromNameServer(String topic, Boolean isDefault, MQDefaultProducer mqDefaultProducer);
// 根据阻抗平衡算法,选择一个队列进行最新消息推送DefaultMQProducerImplselectOneMessageQueue(TopicPublishInfo topic, String lastBrokerName);
// 推送最新消息DefaultMQProducerImplsendKernelImpl(Message msg, MessageQueue queue);

接下来我们进行源代码级分析,可以对照上图学习:

SendResult

如果最新消息推送成功,会返回一个SendResult对象:

/*** 推送最新消息结果*/public class SendResult {	/**	* 推送最新消息结果状况	*/    private SendStatus sendStatus;    /**	* 最新消息的唯一key,由Client推送最新消息时生成	*/    private String msgId;    /**	* 最新消息队列	*/    private MessageQueue messageQueue;    /**	* 最新消息队列偏移量	*/    private long queueOffset;    /**	* 事务ID	*/    private String transactionId;    /**	* 下一条最新消息的偏移量	*/    private String offsetMsgId;    /**	* 区域ID	*/    private String regionId;}

其中SendStatus是一个枚举值:

public enum SendStatus {    SEND_OK,    FLUSH_DISK_TIMEOUT,    FLUSH_SLAVE_TIMEOUT,    SLAVE_NOT_AVAILABLE,}
  • SEND_OK:最新消息推送成功且储存同步成功
  • FLUSH_DISK_TIMEOUT:最新消息推送成功但储存失败
  • FLUSH_SLAVE_TIMEOUT:最新消息推送成功但slave节点超时
  • SLAVE_NOT_AVAILABLE:最新消息推送成功但slave节点不可用

最新消息递送源代码导出

Producer推送最新消息

DefaultMQProducer推送最新消息类数学模型:

  • MQAdmin:MQ管理的基类
  • ClientConfig:客户端配置类
  • DefaultMQProducer:最新消息商品和服务项目

使用Producer推送最新消息,具体编码实现方式如下表所示:

  1. 创建DefaultMQProducer,传入指定推送最新消息所在组
  2. 设置注册登记服务项目中心门牌号,Producer会从里面以获取到Topic以及队列
  3. 推送最新消息

推送最新消息时必须指定Topic,最新消息标签,最新消息体

package com.wjw;import com.alibaba.rocketmq.client.producer.DefaultMQProducer;import com.alibaba.rocketmq.client.producer.SendResult;import com.alibaba.rocketmq.common.message.Message;import com.alibaba.rocketmq.remoting.common.RemotingHelper;public class MQProducerA {    public static void main(String[] args) throws Exception {        // 创建最新消息商品和服务项目,指定组        DefaultMQProducer producer = new DefaultMQProducer("group-A");        // 设置注册登记服务项目中心门牌号        producer.setNamesrvAddr("localhost");        producer.start();        for (int i = 0; i 
1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!