专栏首页奕仁专栏谈谈我项目中用到的RabbitMQ/RocketMQ

谈谈我项目中用到的RabbitMQ/RocketMQ

前两天看了看一下消息队列——RabbitMQ,从配置到使用,说说消息队列MQ的工作机制.

  用户再指定队列内发送消息,消息会被发送到消息队列服务器(如果是本地,则为127.0.0.1)的交换机上,缓存到broker上,交换机会根据指定的路由的key来匹配所要消费的队列 而消费监听器在不断拉取或者消息路由器推送要消费的消息,如果消息消费完成,确认消息,进而broker上再删除该消息;如果抛异常了,重试消费,到达设定的阈值之后还未消费成功,则进入了死信队列,因此在监听消费者队列中,大都需要创建一个死信队列,用来对消费失败或者队列不存在的消息进行重新路由消费(在1000并发下[jmeter]消费速度明显比rocketmq慢【可能跟硬件有关】)。

RocketMQ是用java语言开发的一款消息队列,之前金融的项目中用到了这款消息队列。流程大致是先发送消息,然后记录该消息的状态,如果消息没有消费,重新发送至消费方让其消费,消费完成之后再确认消息。其实原理大致都一样,如果用户选择的是Topic(也就是订阅/发布),broker会匹配当前订阅的topic[主题](消息队列的组,比如订单topic,支付topic 等都分开路由)以及指定的队列匹配规则(rabbitmq为 queue.# [表示发送到该队列下的所有key都在这个队列下消费]、RocketMQ为shardingKey[会先根据topic分组,然后再根据tag【子标签】进行分类,比如充值,下单都订阅的支付的topic,但其tag可为recharge_tag,invest_tag,最后用shardingkey来对消息进行排序路由,天然支持顺序消费,金融类用的较多]),在使用rocketmq,发送消息之前需要对消息防重复crc32校验并序列化到硬盘(mysql/redis/等等***/),防止重复发送同一消息导致失去了幂等性,再消费完成消息之后再进行确认消息(rocketmq丢失消息率几乎为0,消息堆积能力非常高,可在配置文件中配置多个属性)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dubbo消费方超时处理

    在dubbo内部,默认设置的是500ms,所以,对于crud事物大的系统来讲肯定是要自定义超时时间咯,作为消费方,自然是优先级比较高. 所以,设置默认超时时间是...

    奕仁
  • 垃圾分类API

    这里,我编写了几个垃圾分类的api,其中包括图像识别,垃圾分类查找,根据关键字或者图片的内容来进行查找

    奕仁
  • SpringMvc源码之返回值拦截HandlerMethodReturnValueHandler

    与上篇类似,HandlerMethodReturnValueHandler是对返回值的解析,相关的注解有, 用法也基本一样 先看看源码,打开类RequestRe...

    奕仁
  • 基于Redis实现消息队列的6种方案之方案简述(下)Redis5.0的新类型Stream

    Redis5.0才有的新数据类型Stream基本上可以满足你对消息队列的所有需求,以下的内容有点长,如果你还在忙的话建议先收藏下。

    不太灵光的程序员
  • 消息队列常用应用场景介绍

    消息队列作为分布式系统中重要的组件,可以解决应用耦合,异步消息,流量削锋等系列问题

    朝雨忆轻尘
  • 为什么分布式一定要有消息队列?

    架构师小秘圈
  • 分布式之消息队列复习精讲!

    小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客...

    用户5224393
  • 分布式之消息队列复习精讲

    Java高级架构
  • 分布式之消息队列复习精讲

    庆幸的是两位朋友都很有上进心,于是博主写这篇文章,帮助他们复习一下关于消息队列中间件这块的要点

    lyb-geek
  • 分布式之消息队列复习精讲

    庆幸的是两位朋友都很有上进心,于是博主写这篇文章,帮助他们复习一下关于消息队列中间件这块的要点

    java思维导图

扫码关注云+社区

领取腾讯云代金券