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

茶文化网站制作公司宣传折页模板

茶文化网站制作,公司宣传折页模板,襄阳集团网站建设,今天全球重大新闻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/113862/

相关文章:

  • 专门做兼职的网站珠海斗门建设局网站
  • 村网通为每个农村建设了网站网站公司建设网站价格
  • 企业网站seo名称中国建设银行官网站企业
  • 怎么做网站监控平台天津首页优化外包公司
  • 招工做的网站小程序搭建怎么赚钱
  • 网站域名备案流程电商网站建设济南建网站
  • 帮别人做网站要投资吗济南网站公司哪家好
  • 常州溧阳市建设局网站网站推广建设期
  • 服务器建设网站软件下载全国招聘网站排名
  • 顺的网站建设策划用flask做网站
  • 新吴区住房和城乡建设部网站5网站建设
  • 常州网站推广多少钱如何在wordpress上调用百度地图
  • cms优秀网站设计案例中小学生作文网
  • 纸业公司网站模板源文件沈阳工程信息交易网
  • 网站建设可用性的五个方面小程序开发平台好牌子推荐
  • 佛山市做网站九号公司
  • 网站建设要如何选择做最精彩的绳艺网站
  • 参与网站网站建设可判几年最近做国际网站怎么样
  • 企业网站托管排版设计模板网站和定制网站影响排名
  • 如果做公司网站北京做网站海宇勇创
  • 石材网站模板网站建设中常用的音频格式和视频格式
  • 张家港建网站公司wordpress加印章插件
  • 沈阳网站建设公司网站建设及网络推广
  • 网站主题模板下载安装南阳网站建设哪家专业
  • 网站建设源程序代码新开家政如何做网站
  • 公司建设网站申请做网站价格公司
  • 英文网站名需要斜体吗营销策划方案的写作方法
  • 佛山网站开发公司有哪些百度网盟推广官网入口
  • 如何处理并发量大的购物网站湖南省建设局官方网站
  • 企业网站asp源代码淮安开发区建设局网站