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

电子商务网站前台建设常用的技术网站个人备案需要什么资料

电子商务网站前台建设常用的技术,网站个人备案需要什么资料,品牌设计网站有哪些,公众号开发设计费用消息过滤与重试What is going to happen when consumer listener returns “RECONSUME_LATER”?在Consumer的消息消费监听器中,如果抛出来RuntimeException并且你自己没有捕获,那也等同于直接返回了“RECONSUME_LATER”消费失败时,重试消息的…

消息过滤与重试

What is going to happen when consumer listener returns “RECONSUME_LATER”?

在Consumer的消息消费监听器中,如果抛出来RuntimeException并且你自己没有捕获,那也等同于直接返回了“RECONSUME_LATER”

62077bb295914c0ea79dc5923584f497.png

消费失败时,重试消息的处理逻辑:

注意,最原始的消息为1号消息,是存在程序员自定义的业务topic中的,而一旦1号消息消费失败,会被客户端重新发回broker端

broker端接收到这条发回的消息后,先把1号消息的原业务topic更改为 %RETRY%consumer group,然后将此消息的topic改为SCHEDULE_TOPIC_XXXX,将此消息的属性key为PROPERTY_REAL_TOPIC对应的value中保存 %RETRY%consumer group这个topic,并将这条消息写入commitlog成为2号消息(注意,这里还会把消息的retryTimes + 1)

2号消息存储的topic为SCHEDULE_TOPIC_XXXX, 一旦2号消息到达了指定的延迟时间后,会被再次取出成为3号消息,此时将2号消息的属性key为PROPERTY_REAL_TOPIC对应的value中保存的topic值 %RETRY%consumer group取出来,设置为3号消息的topic,并将3号消息重新投递到topic为%RETRY%consumer group对应的队列中去

后续,就可以按照正常的逻辑进行消费了
73fdc3c69089470b8db2f591e16feaeb.png

这里是分为了18个等级,分别对应18个queue,这也就有点类似于kafka中的时间轮,将相同延迟级别的消息放入同一个queue,方便统一管理控制

在kafka中是使用了时间轮,进行了更为精确的时间控制 

具体的延迟实现逻辑:

18个延迟级别,分别对应18个ConsumeQueue,并且这18个ConsumeQueue同属于同一个topic:SCHEDULE_TOPIC_XXXX

针对这18个ConsumeQueue,每个都创建了一个专属的延时TimeTask并丢入了一个统一的Timer定时任务实例中,这18个任务初始默认都是1s后执行

每个专属的延时TimeTask的执行逻辑是,

  1. 先从delayLevel.json中先加载已有的消费进度,从而得到下一次要消费的offset,通过这个offset去对应的ConsumeQueue中拿到对应的索引条目,从中拿到phyOffset、size、tagHash,
  2. 需要注意的是,如果往Commitlog中写入的延时消息时,ReputMessageService会把写入的ConsumeQueue对应的索引条目中tagHash,改写为该延时消息下次要执行的时间对应的时间戳nextExecTimestamp
  3. 专属的延时TimeTask拿到该延时消息对应的索引条目的nextExecTimestamp后,与当前时间戳now取一个差值countdown
  4. 如果countdown<=0,说明当前消息已经到了需要被消费的时候了,那么就把这个索引条目对应的延时消息从commitlog中取出,并将该消息对应的topic从SCHEDULE_TOPIC_XXXX,改成该延时消息的属性key为PROPERTY_REAL_TOPIC对应的value中保存的topic值 %RETRY%consumer group,然后把改完后的3号消息,重新调用DefaultMessageStore#putMessage()方法,把该三3号消息投入Commitlog,后续就进去了正常的消费逻辑
  5. 如果countdown<=0,说明当前消息需要再等countdown毫秒才可以被消费,此时就重新new出一个延时TimeTask并带上offset,然后把这个TimeTask丢入Timer中,指定再等countdown毫秒执行这个TimeTask

注意,这里有一个兜底策略,就是如果每个延迟队列很长时间都没有新消息进来,那么每个延迟队列对应的TimeTask,也会每隔100ms被丢入Timer中一次。具体逻辑就是,该延迟队列的上一个TimeTask执行过程中发现该延迟队列没有新的延迟消息,则会在最后,往timer中丢入一个TimeTask,并指定这个TimeTask在100ms后执行,以此循环往复

消费过滤

Where does RocketMQ filter messages? Broker or Consumer?

b21f11f1bc674810a489b326a10bd92f.png

http://www.dtcms.com/wzjs/811751.html

相关文章:

  • 村志网站建设济南seo优化公司
  • 做网站要几天嘉定网站设计制作价格
  • 广州网站建站私自建设网站
  • 天猫网站建设论文手机网站程序
  • 用自己的电脑建网站wordpress更换主题出错
  • 免费建设游戏对战平台网站自己制作头像的网站 设计 动漫
  • 在墙外的优质网站深圳网站建设智能小程序
  • 拉销智能模板建站系统企业展厅设计公司价格表
  • 网站受到攻击 怎么做网站建设到运营需要多少钱
  • 网站开发课程总结个人网店和网站的区别
  • 国字类型网站有哪些内容百度seo优化及推广
  • 广州响应式网站开发长沙做网站最好的公司有哪些
  • 荣昌网站建设互助县wap网站建设公司
  • 做网站建怎么开发微信公众号呢
  • 网站建设的流程步骤软件大全下载app免费
  • 嘉兴网站建设公司遵义网站建设价格
  • 公益环保网站建设上海做网站公司
  • 那些网站布局好看天河区建设和水务局网站
  • 做问卷美观的网站北京网站建设公司哪家最好
  • 网站整站开发找网络公司做的网站到期后 备案的域名属于备案企业还是网络公司
  • 国内企业邮箱哪家好网站导航如何优化
  • 网页在线生成网站做网站的框架结构
  • 网站搜索引擎推广wordpress插件 网站
  • 网站建设方案书阿里云模板申请自媒体账号
  • 朝阳网站建设是什么意思怎么 给自己的网站做优化呢
  • 软件开发 系统开发 网站开发服务wordpress数据库加速插件
  • 做模型的网站建设网站经营范围
  • 淄博专业网站建设哪家好中国建设教育协会的网站查询
  • wordpress站群软件规划网站的总结
  • 中国做民宿的网站一些私人网站