当前位置: 首页 > news >正文

网站制作+app+公众号百度指数怎么分析

网站制作+app+公众号,百度指数怎么分析,三星网上商城发什么快递,网站的界面设计怎么做RocketMQ 延迟消息 RocketMQ 消费者启动流程 什么是延迟消息 RocketMQ 延迟消息是指,生产者发送消息给消费者消息,消费者需要等待一段时间后才能消费到。 使用场景 用户下单之后,15分钟未支付,对支付账单进行提醒或者关单处理…

RocketMQ 延迟消息

RocketMQ 消费者启动流程

什么是延迟消息

RocketMQ 延迟消息是指,生产者发送消息给消费者消息,消费者需要等待一段时间后才能消费到。

使用场景

用户下单之后,15分钟未支付,对支付账单进行提醒或者关单处理。

RocketMQ 开源版本的消息不支持任意时间精度,只支持5s 10s 1m等等。

Broker 如何处理延迟消息

消息投递如下:

  1. 生产者发送一个延迟消息到一个 topic
  2. Broker 判断是个延迟消息后,将消息暂存
  3. Broker 通过延迟服务, 先检查消息是否过期,如果到期将消息投递到目标 topic
  4. 消费者消费topic中的投递延迟消息。

开源RocketMQ 的消息不支持任意精度,默认支持 18个 level:

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

Broker 在启动的时候,会创建一个内部 topic:“SCHEDULE_TOPIC_XXXX” 根据延迟 level 数量,创建对应数量的 队列。 也就是说 18 level 对应了18 个队列。

具体可以在 代码TopicConfigManager.java 中 看到:

private static final int SCHEDULE_TOPIC_QUEUE_NUM = 18;

要注意的是,Broker 一般是集群模式
部署,也就是说,每个Broker 都会有18个队列。

TopicConfigManager#TopicConfigManager(BrokerController brokerController)

生产者消息延迟发送

代码示例如下:

Message msg=new Message();
msg.setTopic("TopicA");
msg.setTags("Tag");
msg.setBody("this is a delay message".getBytes());
//设置延迟level为5,对应延迟1分钟
msg.setDelayTimeLevel(5);
producer.send(msg);

Broker 存储延迟消息

上一篇文章已经谈到,Broker 收到消费者消息后,会进行消息存储,然后再转发到消费队列(ConsumerQueue),然后再推给消费者。

其实一旦消息转发到

存储延迟消息的流程也类似

  1. 确定延迟消息投递到topic 哪个队列。存储生产者写入的消息时,将消息转发到 ConsumeQueue 中,消费者就能消费到。 延迟消息不能立即消息到,于是将 topic 名称修改为 SCHEDULE_TOPIC_XXX,并根据延迟消息级别,确定投递到哪个队列上。同时还会将原来消息要发送到的目标 topic 和队列记录投递到哪个队列。

代码在CommitLog#asyncPutMessage 中

设置延迟消息的投递队列信息代码如下:

 // Delay Deliveryif (msg.getDelayTimeLevel() > 0) {// 如果设置的级别超过了最大级别,重置延迟级别if (msg.getDelayTimeLevel() > this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel()) {msg.setDelayTimeLevel(this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel());}
// 计算延迟消息应该投递到 SCHEDULE_TOPIC_XXXX 到哪个队列。topic = TopicValidator.RMQ_SYS_SCHEDULE_TOPIC;int queueId = ScheduleMessageService.delayLevel2QueueId(msg.getDelayTimeLevel());// Backup real topic, queueId// 记录原始 topic ,queueid,方便后期投递到目标 topicMessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_TOPIC, msg.getTopic());MessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_QUEUE_ID, String.valueOf(msg.getQueueId()));msg.setPropertiesString(MessageDecoder.messageProperties2String(msg.getProperties()));
// 更新消息投递目标为 SCHEDULE_TOPIC_XXX,queueIdmsg.setTopic(topic);msg.setQueueId(queueId);}

消息转发

消息转发过程其实中会对延迟消息做一些特殊处理

CommitLog中的消息转发到CosumeQueue中是异步进行的。在转发过程中,会对延迟消息进行特殊处理,主要是计算这条延迟消息需要在什么时候进行投递。

http://www.yayakq.cn/news/314926/

相关文章:

  • 设计开发建设网站wordpress 备份数据库
  • 网站个别页面做seo新媒体网络营销的概念
  • 阿里云虚拟主机做企业网站石家庄网站建设加q.479185700
  • 上海建设工程造价信息网站潮州移动网站建设
  • 如何加强高校网站建设织梦网站模版下载
  • 西安网站建设推荐q479185700上墙东旭网站建设
  • 织梦做的网站不能用手机访问石家庄网页
  • 成都网站外包优化公司南京怎样做网站
  • 支付宝 收费 网站开发某网站突然不能浏览了
  • 网站开发培训宿迁做网站多少钱
  • 怎么用vs2008做网站地方门户网站系统建设方案
  • 网站空间不够用心理咨询网站开发
  • 专业企业建站系统广告网站设计公司好吗
  • 0000网站建设企业常用系统各系统介绍
  • 建一个设计网站要多少钱做广个公司网站权重
  • 中山精品网站建设案例网站内搜索功能怎么做
  • 什么网站可以做行测西红门做网站
  • 联通公网ip申请 做网站谷歌网站收录入口
  • 网站访问人数代码网站建设数据处理
  • 电子商务网站如何进行维护和推广网站建设公司擅自关闭客户网络
  • 南山做网站网络整合营销方案策划
  • 广州做网站比较好的公司wordpress下载类插件
  • 做微信充值网站网站seo工具
  • 常州做网站价格网站可以做外部链接吗
  • 爱站关键词挖掘查询工具青岛网站建设企业建站
  • 网站的费用多少合适佛山龙江做网站的
  • 建设信源网站客户管理系统排名
  • 设计网站网站名称网站后台如何管理
  • 网站建设技术简易留言板做脚本的网站
  • 在游戏网站做中介合法wordpress防止被镜像