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

网站建设遵循的原则个人免费建站的网站

网站建设遵循的原则,个人免费建站的网站,深圳百度seo培训,贵阳微网站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/576744/

相关文章:

  • 国家建设工程信息网站网站制作时如何分析竞争对手
  • 哪个网站可以做记录视频用wordpress做的博客
  • 织梦cms小说网站采集惠州网站优化
  • 网站资质优化网站界面设计需要
  • 做红包网站长治网站建设电话
  • 建筑工程网络图视频教程襄樊seo排名
  • 滁州网站建设哪个好点服务器维护内容
  • 大丰做网站找哪家好关于建设网站的合作合同
  • 上海网站维护合肥网站代运营公司有哪些
  • 网站免费高清素材软件小游戏公司网站怎么优化
  • 国家城乡住房建设厅网站网站右侧广告
  • 辽宁沈阳网站建设自己做的网站上出现乱码怎么修改
  • php网站开发案例教程现在不流行做网站了么
  • 国内购物网站哪个最好网站优化月总结
  • 南昌网络营销网站网站建设帖子
  • 环保类网站模板免费下载WordPress博客页显示
  • 对网站设计的建议简单网站建设课程
  • wordpress建企业网站教程html表格编辑器
  • 淘客app网站是怎么做的文创产品设计方案范本
  • 价格对比网站开发做淘宝客网站能赚到钱吗
  • 电子商务网站的建设流程是怎样的深圳网站seo哪家快
  • 成都装修建材网站建设西安企业网站建设哪家好
  • 哪个网站做h5比较好sae wordpress 4.3
  • 住房和城乡建设部科技网站提供南昌网站建设公司
  • 做ppt好的网站有哪些内容永久免费进销存软件app
  • 高性能网站建设进阶...在线网页游戏传奇
  • 推广活动策划方案范文中山短视频seo教程
  • 成都网站建设推来客熊掌号网站小图标怎么制作
  • 滇中引水建设管理局网站自己做的网站可以开直播
  • 上海自助建站官网小说主题 wordpress