【MQ】消息中间件

MQ与RPC的异同?

相同点:都是分布式系统下的通信方式。

不同点:RPC和消息中间件的场景的差异很大程度上在于就是“依赖性”和“同步性”。

消息中间件出现以后对于交易场景可能是调用库存中心等强依赖系统执行业务,之后发布一条存储于消息中间件的消息,像是短信通知服务、数据统计服务、日志服务等等都是依赖于消息中间件去消费这条消息来完成自己的业务逻辑。

RPC方式是典型的同步方式,让远程调用像本地调用。消息中间件方式属于异步方式。消息队列是系统级、模块级的通信。RPC是对象级、函数级通信。

消息中间件的使用场景

异步处理

场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种:1.串行的方式;2.并行方式。

串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端。

并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。

 

应用解耦

场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。这样的缺点是,假如库存系统无法访问,则订单减库存将失败,从而导致订单调用失败。

解决方案:

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。

库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

流量削峰

流量削峰也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列:可以控制活动的人数;可以缓解短时间内高流量压垮应用。

消息通讯

消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。

点对点通讯:客户端A和客户端B使用同一队列,进行消息通讯。

聊天室通讯:客户端A,客户端B,客户端N订阅同一主题,进行消息发布和订阅。实现类似聊天室效果。

常见中间件的比较

如果一般的业务系统要引入MQ,怎么选型:

用户访问量在ActiveMQ的可承受范围内,而且确实主要是基于解耦和异步来用的,可以考虑ActiveMQ,也比较贴近Java工程师的使用习惯。

RabbitMQ,但是确实erlang语言阻止了我们去深入研究和掌控,对公司而言,几乎处于不可控的状态,但是确实是开源的,有比较稳定的支持,活跃度也高。

对自己公司技术实力有绝对自信的,可以用RocketMQ 。

所以中小型公司,技术实力较为一般,技术挑战不是特别高,用ActiveMQ、RabbitMQ是不错的选择;大型公司,基础架构研发实力较强,用RocketMQ是很好的选择

如果是大数据领域的实时计算、日志采集等场景,用Kafka,Kafka天生适合分布式系统,性能最好,社区活跃度很高,几乎是全世界这个领域的事实性规范。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值