消息中间件之MQ

  • 基本概念:

MQ: (Message Queue)消息队列,指的是保存消息的一个容器,本质是队列。

消息: 在应用之间传送的数据,可以是简单的文本字符串,也可以是对象。

队列:是一种特殊的线性表,它只允许在表的前端(队头)进行删除操作(出队列),在队尾进行插入操作(入队列);具有先进先出特性(FIFO),例如现实中的水管。

生产者向消息队列中存入数据,消费者从队列中获取数据;

  • 消息队列的应用场景:

应用解耦、异步处理、流量削峰、日志。

  • 解耦:将复杂的关系(比如调用关系、关联关系、数据传递关系、控制关系),降低直接关联。

一个系统或者模块A通过调用接口推送数据给其他多个系统,如果有其中一个系统不用数据。或者有一个新系统又需要数据。A又得去改造调用方式。这样A就出现严重耦合,其他系统如果挂了,需不需要继续发送数据?需不需要保存数据?

使用MQ,A先将产生的数据发送到MQ里面去,其他系统需要的话,直接从MQ里面去消费。A不需要考虑是否调用成功,是否超时等问题。

  • 异步:主要是为了减少请求的响应时间,实现非核心流程的异步化,提高系统的相应性能。

A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库要 3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 3 + 300 + 450 + 200 = 953ms,接近 1s,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求,等待个 1s,这几乎是不可接受的。

使用MQ,A只需要发3条消息到MQ队列中,假如耗时 5ms,mq返回成功结果,用户不需要等待B、C、D系统处理,继续执行其他请求。等它们系统处理完后,将数据进行返回。 系统从接受一个请求到返回响应给用户,总时长是 3 + 5 = 8ms,对于用户而言,访问时间缩短。

简而言之:

A服务调用B服务,B服务先返回一个成功给A,A不需要在继续等待,B继续处理任务,处理成功把数据发送给mq,然后mq再发送给A服务,这就是mq的异步处理

  • 削峰:服务器处理消息能力有限,一段时间出现集中的流量冲击,会击垮服务器。需要削弱峰值流量,对服务器起一个缓冲作用。

使用MQ,将大量的请求写入MQ,服务器,然后服务器从MQ根据自己承受能力去消费,错过峰值时间段,挤压的消息队列会被慢慢消费掉。

  • 日志:对大量日志传输进行处理;日志采集到MQ(kafka)中,日志处理通过订阅方式来消费日志信息。

  • 缺点:

系统复杂度提高;
系统可用性降低;
数据一致性问题;
  • 消息分类:

• Active MQ:
单机吞吐量万级,时效性ms级,维护少,高吞吐量,较少使用。

• RocketMQ:(应用于金融互联网领域)
     优点:单机吞吐量十万级,分布式架构,功能较为完善,消息可以做到0丢失,扩展性好。使用java语言实现。
     缺点:支持的客户端语言不多,目前是java和C++,社区活跃度一般。

• RabbitMQ:
    主流中间件之一,使用erlang语言的高并发性,性能好,吞吐量到万级,支持多种语言,社区活跃度高,更新频率高。商业版需要收费。

• Kafka: 
    优点:应用于大数据领域内的消息传输以及日志采集,性能卓越,吞吐量高;
    缺点:Kafka单机超过64个队列/分区。load会出现明显的飙高现象,队列越多,load越高,发送消息响应的时间就越长。消费失败不支持重试,支持消息顺序,但是一台代理宕机后,会产生消息乱序,社区更新慢。
  • 消息模式:

Java 消息服务是一个与具体平台无关的 API,它包括两种消息模式,点对点和发布者/订阅者

  • 点对点模型:一个生产者向特定的队列中发送消息,只有一个消费者从队列中读取消息。

特点:

消息一旦被消费或者超时,就不在消息队列中;
发送者和消费者之间在时间上没有依赖关系,发送者发送消息时,消费者不需要处于运行状态;消费者 在读取消息时,生产者不需要处于运行状态;
接收者在成功接收消息之后,需向队列应答成功。

  • 发布/订阅模型:一个发布者向指定队列发送消息,0 个或多个订阅者可以接受来自特定消息主题的消息

特点:

发布者需创建一个订阅主题(Topic)以便客户端能够持续接收消息;
发布者和订阅者之间有时间上的依赖性;
针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
为了消费消息,订阅者必须保持运行的状态。

参考文档:为什么使用MQ


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值